#include "FuncStatus.h"
#include "gettext.h"
#include "LaTeXFeatures.h"
-#include "lyx_main.h"
#include "lyxlength.h"
#include "lyxlex.h"
#include "metricsinfo.h"
namespace lyx {
-using support::absolutePath;
using support::bformat;
using support::changeExtension;
using support::compare_timestamps;
using support::contains;
+using support::DocFileName;
using support::FileName;
using support::float_equal;
using support::getExtension;
InsetGraphics::InsetGraphics()
- : graphic_label(sgml::uniqueID("graph")),
+ : graphic_label(sgml::uniqueID(from_ascii("graph"))),
graphic_(new RenderGraphic(this))
{}
InsetGraphics::InsetGraphics(InsetGraphics const & ig)
: InsetOld(ig),
boost::signals::trackable(),
- graphic_label(sgml::uniqueID("graph")),
+ graphic_label(sgml::uniqueID(from_ascii("graph"))),
graphic_(new RenderGraphic(*ig.graphic_, this))
{
setParams(ig.params());
}
-void InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const
+bool InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const
{
graphic_->metrics(mi, dim);
+ bool const changed = dim_ != dim;
dim_ = dim;
+ return changed;
}
}
-string const InsetGraphics::toDocbookLength(LyXLength const & len) const
+docstring const InsetGraphics::toDocbookLength(LyXLength const & len) const
{
- ostringstream result;
+ odocstringstream result;
switch (len.unit()) {
case LyXLength::SP: // Scaled point (65536sp = 1pt) TeX's smallest unit.
result << len.value() * 65536.0 * 72 / 72.27 << "pt";
result << len.value() << "%";
break;
default:
- result << len.asString();
+ result << len.asDocstring();
break;
}
return result.str();
}
-string const InsetGraphics::createDocBookAttributes() const
+docstring const InsetGraphics::createDocBookAttributes() const
{
// Calculate the options part of the command, we must do it to a string
// stream since we copied the code from createLatexParams() ;-)
// FIXME: av: need to translate spec -> Docbook XSL spec (http://www.sagehill.net/docbookxsl/ImageSizing.html)
// Right now it only works with my version of db2latex :-)
- ostringstream options;
+ odocstringstream options;
double const scl = convert<double>(params().scale);
if (!params().scale.empty() && !float_equal(scl, 0.0, 0.05)) {
if (!float_equal(scl, 100.0, 0.05))
if (!params().special.empty())
- options << params().special << " ";
+ options << from_ascii(params().special) << " ";
- string opts = options.str();
// trailing blanks are ok ...
- return opts;
+ return options.str();
}
};
-std::pair<CopyStatus, string> const
-copyFileIfNeeded(string const & file_in, string const & file_out)
+std::pair<CopyStatus, FileName> const
+copyFileIfNeeded(FileName const & file_in, FileName const & file_out)
{
- BOOST_ASSERT(absolutePath(file_in));
- BOOST_ASSERT(absolutePath(file_out));
-
unsigned long const checksum_in = support::sum(file_in);
unsigned long const checksum_out = support::sum(file_out);
lyxerr[Debug::GRAPHICS]
<< to_utf8(support::bformat(_("Could not copy the file\n%1$s\n"
"into the temporary directory."),
- from_utf8(file_in)))
+ from_utf8(file_in.absFilename())))
<< std::endl;
}
}
-std::pair<CopyStatus, string> const
-copyToDirIfNeeded(FileName const & file, string const & dir)
+std::pair<CopyStatus, FileName> const
+copyToDirIfNeeded(DocFileName const & file, string const & dir)
{
using support::rtrim;
string::size_type const ext_len = file_in.length() - base.length();
mangled[mangled.length() - ext_len] = '.';
}
- string const file_out = support::makeAbsPath(mangled, dir);
+ FileName const file_out(support::makeAbsPath(mangled, dir));
- return copyFileIfNeeded(file_in, file_out);
+ return copyFileIfNeeded(file, file_out);
}
// temp_file will contain the file for LaTeX to act on if, for example,
// we move it to a temp dir or uncompress it.
- string temp_file = orig_file;
+ FileName temp_file = params().filename;
// The master buffer. This is useful when there are multiple levels
// of include files
// 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 (runparams.inComment || !isFileReadable(orig_file))
+ if (runparams.inComment || !isFileReadable(params().filename))
return params().filename.outputFilename(m_buffer->filePath());
// We place all temporary files in the master buffer's temp dir.
// run through the LaTeX compiler.
string output_file = support::os::external_path(runparams.nice ?
params().filename.outputFilename(m_buffer->filePath()) :
- onlyFilename(temp_file));
- string source_file = runparams.nice ? orig_file : temp_file;
+ onlyFilename(temp_file.absFilename()));
+ FileName source_file = runparams.nice ? FileName(params().filename) : temp_file;
string const tex_format = (runparams.flavor == OutputParams::LATEX) ?
"latex" : "pdflatex";
lyxerr[Debug::GRAPHICS]
<< "\tpass zipped file to LaTeX.\n";
- string const bb_orig_file = changeExtension(orig_file, "bb");
+ FileName const bb_orig_file = FileName(changeExtension(orig_file, "bb"));
if (runparams.nice) {
runparams.exportdata->addExternalFile(tex_format,
bb_orig_file,
} else {
// LaTeX needs the bounding box file in the
// tmp dir
- string bb_file = changeExtension(temp_file, "bb");
+ FileName bb_file = FileName(changeExtension(temp_file.absFilename(), "bb"));
boost::tie(status, bb_file) =
copyFileIfNeeded(bb_orig_file, bb_file);
if (status == FAILURE)
support::EXCLUDE_EXTENSION);
}
- string const unzipped_temp_file = unzippedFileName(temp_file);
+ FileName const unzipped_temp_file =
+ FileName(unzippedFileName(temp_file.absFilename()));
output_file = unzippedFileName(output_file);
- source_file = unzippedFileName(source_file);
+ source_file = FileName(unzippedFileName(source_file.absFilename()));
if (compare_timestamps(unzipped_temp_file, temp_file) > 0) {
// temp_file has been unzipped already and
// orig_file has not changed in the meantime.
<< "\tthe orig file is: " << orig_file << endl;
if (from == to) {
- if (!runparams.nice && getExtension(temp_file) != ext) {
+ if (!runparams.nice && getExtension(temp_file.absFilename()) != ext) {
// The LaTeX compiler will not be able to determine
// the file format from the extension, so we must
// change it.
- string const new_file = changeExtension(temp_file, ext);
+ FileName const new_file = FileName(changeExtension(temp_file.absFilename(), ext));
if (support::rename(temp_file, new_file)) {
temp_file = new_file;
output_file = changeExtension(output_file, ext);
- source_file = changeExtension(source_file, ext);
+ source_file = FileName(changeExtension(source_file.absFilename(), ext));
} else
lyxerr[Debug::GRAPHICS]
<< "Could not rename file `"
return stripExtensionIfPossible(output_file, to);
}
- string const to_file = changeExtension(temp_file, ext);
+ FileName const to_file = FileName(changeExtension(temp_file.absFilename(), ext));
string const output_to_file = changeExtension(output_file, ext);
// Do we need to perform the conversion?
// FIXME (Abdel 12/08/06): Is there a need to show these errors?
ErrorList el;
- if (converters.convert(&buf, temp_file, temp_file, from, to, el, true)) {
+ if (converters.convert(&buf, temp_file, to_file, params().filename,
+ from, to, el,
+ Converters::try_default | Converters::try_cache)) {
runparams.exportdata->addExternalFile(tex_format,
to_file, output_to_file);
runparams.exportdata->addExternalFile("dvi",
string const relative_file =
params().filename.relFilename(buf.filePath());
- string const file_ = params().filename.absFilename();
- bool const file_exists = !file_.empty() && isFileReadable(file_);
+ bool const file_exists = !params().filename.empty() &&
+ isFileReadable(params().filename);
string const message = file_exists ?
string() : string("bb = 0 0 200 100, draft, type=eps");
// if !message.empty() then there was no existing file
namespace {
int writeImageObject(char * format, odocstream & os, OutputParams const & runparams,
- string const graphic_label, string const attributes)
+ docstring const graphic_label, docstring const attributes)
{
if (runparams.flavor != OutputParams::XML) {
os << "<![ %output.print."
<< "; ["
<< std::endl;
}
- // FIXME UNICODE
os <<"<imageobject><imagedata fileref=\"&"
- << from_ascii(graphic_label)
+ << graphic_label
<< ";."
<< format
<< "\" "
- << from_ascii(attributes);
+ << attributes;
if (runparams.flavor == OutputParams::XML) {
os << " role=\"" << format << "\"/>" ;
}
// easier to use.
if (runparams.flavor == OutputParams::XML) {
runparams.exportdata->addExternalFile("docbook-xml",
- params().filename.absFilename());
+ params().filename);
} else {
runparams.exportdata->addExternalFile("docbook",
- params().filename.absFilename());
+ params().filename);
}
os << "<inlinemediaobject>";
int r = 0;
- string attributes = createDocBookAttributes();
+ docstring attributes = createDocBookAttributes();
r += writeImageObject("png", os, runparams, graphic_label, attributes);
r += writeImageObject("pdf", os, runparams, graphic_label, attributes);
r += writeImageObject("eps", os, runparams, graphic_label, attributes);
void InsetGraphics::editGraphics(InsetGraphicsParams const & p,
Buffer const & buffer) const
{
- string const file_with_path = p.filename.absFilename();
- formats.edit(buffer, file_with_path,
- formats.getFormatFromFile(file_with_path));
+ formats.edit(buffer, p.filename,
+ formats.getFormatFromFile(p.filename));
}