#include "exporter.h"
#include "format.h"
#include "funcrequest.h"
+#include "FuncStatus.h"
#include "gettext.h"
#include "LaTeXFeatures.h"
#include "lyx_main.h"
using lyx::support::float_equal;
using lyx::support::GetExtension;
using lyx::support::IsFileReadable;
+using lyx::support::latex_path;
using lyx::support::OnlyFilename;
using lyx::support::rtrim;
using lyx::support::subst;
Buffer const & buffer = cur.buffer();
InsetGraphicsParams p;
InsetGraphicsMailer::string2params(cmd.argument, buffer, p);
- if (!p.filename.empty()) {
+ if (!p.filename.empty())
setParams(p);
- cur.bv().update();
- }
+ else
+ cur.noUpdate();
break;
}
}
+bool InsetGraphics::getStatus(LCursor & cur, FuncRequest const & cmd,
+ FuncStatus & flag) const
+{
+ switch (cmd.action) {
+ case LFUN_GRAPHICS_EDIT:
+ case LFUN_INSET_MODIFY:
+ case LFUN_INSET_DIALOG_UPDATE:
+ flag.enabled(true);
+ return true;
+
+ default:
+ return InsetBase::getStatus(cur, cmd, flag);
+ }
+}
+
+
void InsetGraphics::edit(LCursor & cur, bool)
{
InsetGraphicsMailer(*this).showDialog(&cur.bv());
}
-string const stripExtension(string const & file)
+string const stripExtensionIfPossible(string const & file)
{
// Remove the extension so the LaTeX will use whatever
// is appropriate (when there are several versions in
// 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 ;-)
- return subst(RemoveExtension(file), ".", "\\lyxdot ");
+ // The automatic format selection does not work if the file
+ // name is escaped.
+ string const latex_name = latex_path(file,
+ lyx::support::EXCLUDE_EXTENSION);
+ if (contains(latex_name, '"'))
+ return latex_name;
+ return latex_path(RemoveExtension(file),
+ lyx::support::PROTECT_EXTENSION,
+ lyx::support::ESCAPE_DOTS);
}
if (to_format == file_format ||
(to_format == "eps" && file_format == "ps") ||
(to_format == "ps" && file_format == "eps"))
- return stripExtension(file);
- return file;
+ return stripExtensionIfPossible(file);
+ return latex_path(file, lyx::support::EXCLUDE_EXTENSION);
}
} // namespace anon
string const InsetGraphics::prepareFile(Buffer const & buf,
OutputParams const & runparams) const
{
- // We assume that the file exists (the caller checks this)
+ // The following code depends on non-empty filenames
+ if (params().filename.empty())
+ return string();
+
string const orig_file = params().filename.absFilename();
string const rel_file = params().filename.relFilename(buf.filePath());
// of include files
Buffer const * m_buffer = buf.getMasterBuffer();
+ // Return the output name if the file does not exist.
+ // We are not going to change the extension or using the name of the
+ // temporary file, the code is already complicated enough.
+ if (!IsFileReadable(orig_file))
+ return params().filename.outputFilename(m_buffer->filePath());
+
// We place all temporary files in the master buffer's temp dir.
// This is possible because we use mangled file names.
// This is necessary for DVI export.
source_file, output_file);
// We can't strip the extension, because we don't know
// the unzipped file format
- return output_file;
+ return latex_path(output_file,
+ lyx::support::EXCLUDE_EXTENSION);
}
string const unzipped_temp_file = unzippedFileName(temp_file);
output_to_file);
runparams.exportdata->addExternalFile("dvi", to_file,
output_to_file);
- return stripExtension(output_file);
+ return stripExtensionIfPossible(output_file);
}
lyxerr[Debug::GRAPHICS]
to_file, output_to_file);
}
- return stripExtension(output_file);
+ return stripExtensionIfPossible(output_file);
}
<< "\tBefore = " << before
<< "\n\tafter = " << after << endl;
-
string latex_str = before + '{';
- if (file_exists)
- // Convert the file if necessary.
- // Remove the extension so the LaTeX will use whatever
- // is appropriate (when there are several versions in
- // different formats)
- latex_str += prepareFile(buf, runparams);
- else
- latex_str += relative_file + " not found!";
-
+ // 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(buf, runparams);
latex_str += '}' + after;
os << latex_str;
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') + 1);
+ return int(lyx::count(latex_str.begin(), latex_str.end(),'\n'));
}
return;
features.includeFile(graphic_label,
- RemoveExtension(params().filename.absFilename()));
+ RemoveExtension(params().filename.absFilename()));
features.require("graphicx");