]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetgraphics.C
* In the process of fixing the math background color bug, this commit transfer backgr...
[lyx.git] / src / insets / insetgraphics.C
index c9c9c8429fc163e4170c6fbe203e3aa91d7d9c2c..beac36cdcf40a697859cf97c677ef6a2b1c62528 100644 (file)
@@ -123,7 +123,7 @@ string findTargetFormat(string const & format, OutputParams const & runparams)
 {
        // Are we using latex or pdflatex?
        if (runparams.flavor == OutputParams::PDFLATEX) {
-               lyxerr[Debug::GRAPHICS] << "findTargetFormat: PDF mode" << endl;
+               LYXERR(Debug::GRAPHICS) << "findTargetFormat: PDF mode" << endl;
                Format const * const f = formats.getFormat(format);
                // Convert vector graphics to pdf
                if (f && f->vectorFormat())
@@ -135,7 +135,7 @@ string findTargetFormat(string const & format, OutputParams const & runparams)
                return "png";
        }
        // If it's postscript, we always do eps.
-       lyxerr[Debug::GRAPHICS] << "findTargetFormat: PostScript mode" << endl;
+       LYXERR(Debug::GRAPHICS) << "findTargetFormat: PostScript mode" << endl;
        if (format != "ps")
                // any other than ps is changed to eps
                return "eps";
@@ -269,7 +269,7 @@ void InsetGraphics::read(Buffer const & buf, LyXLex & lex)
        if (token == "Graphics")
                readInsetGraphics(lex, buf.filePath());
        else
-               lyxerr[Debug::GRAPHICS] << "Not a Graphics inset!" << endl;
+               LYXERR(Debug::GRAPHICS) << "Not a Graphics inset!" << endl;
 
        graphic_->update(params().as_grfxParams());
 }
@@ -283,7 +283,7 @@ void InsetGraphics::readInsetGraphics(LyXLex & lex, string const & bufpath)
                lex.next();
 
                string const token = lex.getString();
-               lyxerr[Debug::GRAPHICS] << "Token: '" << token << '\''
+               LYXERR(Debug::GRAPHICS) << "Token: '" << token << '\''
                                    << endl;
 
                if (token.empty()) {
@@ -468,7 +468,7 @@ copyFileIfNeeded(FileName const & file_in, FileName const & file_out)
        bool const success = mover.copy(file_in, file_out);
        if (!success) {
                // FIXME UNICODE
-               lyxerr[Debug::GRAPHICS]
+               LYXERR(Debug::GRAPHICS)
                        << to_utf8(support::bformat(_("Could not copy the file\n%1$s\n"
                                                           "into the temporary directory."),
                                                from_utf8(file_in.absFilename())))
@@ -508,11 +508,14 @@ copyToDirIfNeeded(DocFileName const & file, string const & dir)
 }
 
 
-string const stripExtensionIfPossible(string const & file)
+string const stripExtensionIfPossible(string const & file, bool nice)
 {
-       // Remove the extension so the LaTeX will use whatever
-       // is appropriate (when there are several versions in
-       // different formats)
+       // Remove the extension so the LaTeX compiler will use whatever
+       // is appropriate (when there are several versions in different
+       // formats).
+       // Do this only if we are not exporting for internal usage, because
+       // pdflatex prefers png over pdf and it would pick up the png images
+       // that we generate for preview.
        // This works only if the filename contains no dots besides
        // the just removed one. We can fool here by replacing all
        // dots with a macro whose definition is just a dot ;-)
@@ -520,7 +523,7 @@ string const stripExtensionIfPossible(string const & file)
        // name is escaped.
        string const latex_name = latex_path(file,
                                             support::EXCLUDE_EXTENSION);
-       if (contains(latex_name, '"'))
+       if (!nice || contains(latex_name, '"'))
                return latex_name;
        return latex_path(removeExtension(file),
                          support::PROTECT_EXTENSION,
@@ -528,7 +531,7 @@ string const stripExtensionIfPossible(string const & file)
 }
 
 
-string const stripExtensionIfPossible(string const & file, string const & to)
+string const stripExtensionIfPossible(string const & file, string const & to, bool nice)
 {
        // No conversion is needed. LaTeX can handle the graphic file as is.
        // This is true even if the orig_file is compressed.
@@ -538,7 +541,7 @@ string const stripExtensionIfPossible(string const & file, string const & to)
        if (to_format == file_format ||
            (to_format == "eps" && file_format ==  "ps") ||
            (to_format ==  "ps" && file_format == "eps"))
-               return stripExtensionIfPossible(file);
+               return stripExtensionIfPossible(file, nice);
        return latex_path(file, support::EXCLUDE_EXTENSION);
 }
 
@@ -557,7 +560,7 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
 
        // previewing source code, no file copying or file format conversion
        if (runparams.dryrun)
-               return stripExtensionIfPossible(rel_file);
+               return stripExtensionIfPossible(rel_file, runparams.nice);
 
        // temp_file will contain the file for LaTeX to act on if, for example,
        // we move it to a temp dir or uncompress it.
@@ -606,7 +609,7 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
                        // this file, but we can't check, because that would
                        // mean to unzip the file and thereby making the
                        // noUnzip parameter meaningless.
-                       lyxerr[Debug::GRAPHICS]
+                       LYXERR(Debug::GRAPHICS)
                                << "\tpass zipped file to LaTeX.\n";
 
                        FileName const bb_orig_file = FileName(changeExtension(orig_file, "bb"));
@@ -643,32 +646,32 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
                        // temp_file has been unzipped already and
                        // orig_file has not changed in the meantime.
                        temp_file = unzipped_temp_file;
-                       lyxerr[Debug::GRAPHICS]
+                       LYXERR(Debug::GRAPHICS)
                                << "\twas already unzipped to " << temp_file
                                << endl;
                } else {
                        // unzipped_temp_file does not exist or is too old
                        temp_file = unzipFile(temp_file);
-                       lyxerr[Debug::GRAPHICS]
+                       LYXERR(Debug::GRAPHICS)
                                << "\tunzipped to " << temp_file << endl;
                }
        }
 
        string const from = formats.getFormatFromFile(temp_file);
        if (from.empty()) {
-               lyxerr[Debug::GRAPHICS]
+               LYXERR(Debug::GRAPHICS)
                        << "\tCould not get file format." << endl;
        }
        string const to   = findTargetFormat(from, runparams);
        string const ext  = formats.extension(to);
-       lyxerr[Debug::GRAPHICS]
+       LYXERR(Debug::GRAPHICS)
                << "\t we have: from " << from << " to " << to << '\n';
 
        // We're going to be running the exported buffer through the LaTeX
        // compiler, so must ensure that LaTeX can cope with the graphics
        // file format.
 
-       lyxerr[Debug::GRAPHICS]
+       LYXERR(Debug::GRAPHICS)
                << "\tthe orig file is: " << orig_file << endl;
 
        if (from == to) {
@@ -682,7 +685,7 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
                                output_file = changeExtension(output_file, ext);
                                source_file = FileName(changeExtension(source_file.absFilename(), ext));
                        } else
-                               lyxerr[Debug::GRAPHICS]
+                               LYXERR(Debug::GRAPHICS)
                                        << "Could not rename file `"
                                        << temp_file << "' to `" << new_file
                                        << "'." << endl;
@@ -692,7 +695,7 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
                                                      output_file);
                runparams.exportdata->addExternalFile("dvi", source_file,
                                                      output_file);
-               return stripExtensionIfPossible(output_file, to);
+               return stripExtensionIfPossible(output_file, to, runparams.nice);
        }
 
        FileName const to_file = FileName(changeExtension(temp_file.absFilename(), ext));
@@ -702,7 +705,7 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
        // Yes if to_file does not exist or if temp_file is newer than to_file
        if (compare_timestamps(temp_file, to_file) < 0) {
                // FIXME UNICODE
-               lyxerr[Debug::GRAPHICS]
+               LYXERR(Debug::GRAPHICS)
                        << to_utf8(bformat(_("No conversion of %1$s is needed after all"),
                                   from_utf8(rel_file)))
                        << std::endl;
@@ -710,10 +713,10 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
                                                      output_to_file);
                runparams.exportdata->addExternalFile("dvi", to_file,
                                                      output_to_file);
-               return stripExtensionIfPossible(output_to_file);
+               return stripExtensionIfPossible(output_to_file, runparams.nice);
        }
 
-       lyxerr[Debug::GRAPHICS]
+       LYXERR(Debug::GRAPHICS)
                << "\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'
@@ -730,16 +733,16 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
                                to_file, output_to_file);
        }
 
-       return stripExtensionIfPossible(output_to_file);
+       return stripExtensionIfPossible(output_to_file, runparams.nice);
 }
 
 
 int InsetGraphics::latex(Buffer const & buf, odocstream & os,
-                        OutputParams const & runparams) const
+                         OutputParams const & runparams) const
 {
        // If there is no file specified or not existing,
        // just output a message about it in the latex output.
-       lyxerr[Debug::GRAPHICS]
+       LYXERR(Debug::GRAPHICS)
                << "insetgraphics::latex: Filename = "
                << params().filename.absFilename() << endl;
 
@@ -754,7 +757,7 @@ int InsetGraphics::latex(Buffer const & buf, odocstream & os,
        // "filename" found. In this case LaTeX
        // draws only a rectangle with the above bb and the
        // not found filename in it.
-       lyxerr[Debug::GRAPHICS]
+       LYXERR(Debug::GRAPHICS)
                << "\tMessage = \"" << message << '\"' << endl;
 
        // These variables collect all the latex code that should be before and
@@ -777,14 +780,14 @@ int InsetGraphics::latex(Buffer const & buf, odocstream & os,
 
        // Write the options if there are any.
        string const opts = createLatexOptions();
-       lyxerr[Debug::GRAPHICS] << "\tOpts = " << opts << endl;
+       LYXERR(Debug::GRAPHICS) << "\tOpts = " << opts << endl;
 
        if (!opts.empty() && !message.empty())
                before += ('[' + opts + ',' + message + ']');
        else if (!opts.empty() || !message.empty())
                before += ('[' + opts + message + ']');
 
-       lyxerr[Debug::GRAPHICS]
+       LYXERR(Debug::GRAPHICS)
                << "\tBefore = " << before
                << "\n\tafter = " << after << endl;
 
@@ -797,7 +800,7 @@ int InsetGraphics::latex(Buffer const & buf, odocstream & os,
        // FIXME UNICODE
        os << from_utf8(latex_str);
 
-       lyxerr[Debug::GRAPHICS] << "InsetGraphics::latex outputting:\n"
+       LYXERR(Debug::GRAPHICS) << "InsetGraphics::latex outputting:\n"
                                << latex_str << endl;
        // Return how many newlines we issued.
        return int(lyx::count(latex_str.begin(), latex_str.end(),'\n'));
@@ -805,7 +808,7 @@ int InsetGraphics::latex(Buffer const & buf, odocstream & os,
 
 
 int InsetGraphics::plaintext(Buffer const &, odocstream & os,
-                        OutputParams const &) const
+                             OutputParams const &) const
 {
        // No graphics in ascii output. Possible to use gifscii to convert
        // images to ascii approximation.
@@ -814,10 +817,12 @@ int InsetGraphics::plaintext(Buffer const &, odocstream & os,
        // at least we send the filename
        // FIXME UNICODE
        // FIXME: We have no idea what the encoding of the filename is
-       os << '<' << bformat(_("Graphics file: %1$s"),
-                            from_utf8(params().filename.absFilename()))
-          << ">\n";
-       return 0;
+
+       docstring const str = bformat(_("Graphics file: %1$s"),
+                                     from_utf8(params().filename.absFilename()));
+       os << '<' << str << '>';
+
+       return 2 + str.size();
 }