X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetGraphics.cpp;h=8e95db2e229a8b5c9d5dc25eced2f5cb0d67b480;hb=1cdd5fcb6f76ef8066707c521eef0c01cead00dd;hp=31b6c181f314ed416e92c72d3c671d406f898444;hpb=03a221698170107243aedba684a546119bdec82a;p=lyx.git diff --git a/src/insets/InsetGraphics.cpp b/src/insets/InsetGraphics.cpp index 31b6c181f3..8e95db2e22 100644 --- a/src/insets/InsetGraphics.cpp +++ b/src/insets/InsetGraphics.cpp @@ -102,9 +102,10 @@ namespace { /// Note that \p format may be unknown (i. e. an empty string) string findTargetFormat(string const & format, OutputParams const & runparams) { - // Are we using latex or XeTeX/pdflatex? + // Are we using latex or XeTeX/LuaTeX/pdflatex? if (runparams.flavor == OutputParams::PDFLATEX - || runparams.flavor == OutputParams::XETEX) { + || runparams.flavor == OutputParams::XETEX + || runparams.flavor == OutputParams::LUATEX) { LYXERR(Debug::GRAPHICS, "findTargetFormat: PDF mode"); Format const * const f = formats.getFormat(format); // Convert vector graphics to pdf @@ -209,6 +210,7 @@ void InsetGraphics::doDispatch(Cursor & cur, FuncRequest & cmd) break; } + cur.recordUndo(); setParams(p); // if the inset is part of a graphics group, all the // other members should be updated too. @@ -488,7 +490,7 @@ copyToDirIfNeeded(DocFileName const & file, string const & dir) return make_pair(IDENTICAL_PATHS, file_in); string mangled = file.mangledFileName(); - if (file.isZipped()) { + if (formats.isZippedFile(file)) { // We need to change _eps.gz to .eps.gz. The mangled name is // still unique because of the counter in mangledFileName(). // We can't just call mangledFileName() with the zip @@ -609,13 +611,12 @@ string InsetGraphics::prepareFile(OutputParams const & runparams) const FileName source_file = runparams.nice ? FileName(params().filename) : temp_file; // determine the export format - string const tex_format = (runparams.flavor == OutputParams::LATEX) ? - "latex" : "pdflatex"; + string const tex_format = flavor2format(runparams.flavor); // 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! - if (params().filename.isZipped()) { + if (formats.isZippedFile(params().filename)) { if (params().noUnzip) { // We don't know whether latex can actually handle // this file, but we can't check, because that would @@ -744,8 +745,8 @@ string InsetGraphics::prepareFile(OutputParams const & runparams) const } -int InsetGraphics::latex(odocstream & os, - OutputParams const & runparams) const +void InsetGraphics::latex(otexstream & os, + OutputParams const & runparams) const { // If there is no file specified or not existing, // just output a message about it in the latex output. @@ -754,10 +755,20 @@ int InsetGraphics::latex(odocstream & os, bool const file_exists = !params().filename.empty() && params().filename.isReadableFile(); - string const message = file_exists ? - string() : string("bb = 0 0 200 100, draft, type=eps"); - // if !message.empty() then there was no existing file - // "filename" found. In this case LaTeX + string message; + if (!file_exists) { + if (params().bb.empty()) + message = "bb = 0 0 200 100"; + if (!params().draft) { + if (!message.empty()) + message += ", "; + message += "draft"; + } + if (!message.empty()) + message += ", "; + message += "type=eps"; + } + // If no existing file "filename" was found LaTeX // draws only a rectangle with the above bb and the // not found filename in it. LYXERR(Debug::GRAPHICS, "\tMessage = \"" << message << '\"'); @@ -788,14 +799,13 @@ int InsetGraphics::latex(odocstream & os, // Convert the file if necessary. // Remove the extension so LaTeX will use whatever is appropriate // (when there are several versions in different formats) - latex_str += prepareFile(runparams); + string file_path = prepareFile(runparams); + latex_str += file_path; latex_str += '}' + after; // FIXME UNICODE os << from_utf8(latex_str); LYXERR(Debug::GRAPHICS, "InsetGraphics::latex outputting:\n" << latex_str); - // Return how many newlines we issued. - return int(count(latex_str.begin(), latex_str.end(),'\n')); } @@ -958,6 +968,7 @@ string InsetGraphics::prepareHTMLFile(OutputParams const & runparams) const docstring InsetGraphics::xhtml(XHTMLStream & xs, OutputParams const & op) const { string const output_file = prepareHTMLFile(op); + if (output_file.empty()) { LYXERR0("InsetGraphics::xhtml: Unable to prepare file `" << params().filename << "' for output. File missing?"); @@ -968,10 +979,18 @@ docstring InsetGraphics::xhtml(XHTMLStream & xs, OutputParams const & op) const } // FIXME XHTML - // Do we want to do something with the parameters, other than use them to - // crop, etc, the image? - // Speaking of which: Do the cropping, rotating, etc. - string const attr = "src='" + output_file + "' alt='image: " + // We aren't doing anything with the crop and rotate parameters, and it would + // really be better to do width and height conversion, rather than to output + // these parameters here. + string imgstyle; + if (!params().width.zero()) + imgstyle += "width:" + params().width.asHTMLString() + ";"; + if (!params().height.zero()) + imgstyle += " height:" + params().height.asHTMLString() + ";"; + if (!imgstyle.empty()) + imgstyle = "style='" + imgstyle + "' "; + + string const attr = imgstyle + "src='" + output_file + "' alt='image: " + output_file + "'"; xs << html::CompTag("img", attr); return docstring(); @@ -990,9 +1009,7 @@ void InsetGraphics::validate(LaTeXFeatures & features) const features.require("graphicx"); if (features.runparams().nice) { - Buffer const * masterBuffer = features.buffer().masterBuffer(); - string const rel_file = removeExtension( - params().filename.relFileName(masterBuffer->filePath())); + string const rel_file = params().filename.onlyFileNameWithoutExt(); if (contains(rel_file, ".")) features.require("lyxdot"); } @@ -1029,7 +1046,7 @@ void InsetGraphics::editGraphics(InsetGraphicsParams const & p) const } -void InsetGraphics::addToToc(DocIterator const & cpit) +void InsetGraphics::addToToc(DocIterator const & cpit) const { TocBackend & backend = buffer().tocBackend(); @@ -1039,9 +1056,9 @@ void InsetGraphics::addToToc(DocIterator const & cpit) } -docstring InsetGraphics::contextMenu(BufferView const &, int, int) const +string InsetGraphics::contextMenuName() const { - return from_ascii("context-graphics"); + return "context-graphics"; }