X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetinclude.C;h=36d745ffaab50d50390a14dbced97131035e6018;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=f0954516f42f251904a07ab4b6908e53d75c2a90;hpb=34a773b8cfe22ed278d101a13ad554a61fda526b;p=lyx.git diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index f0954516f4..36d745ffaa 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -40,7 +40,6 @@ #include "insets/render_preview.h" -#include "support/filename.h" #include "support/filetools.h" #include "support/lstrings.h" // contains #include "support/lyxalgo.h" @@ -60,6 +59,7 @@ using support::changeExtension; using support::contains; using support::copy; using support::DocFileName; +using support::FileName; using support::getFileContents; using support::isFileReadable; using support::isLyXFilename; @@ -217,7 +217,7 @@ string const parentFilename(Buffer const & buffer) } -string const includedFilename(Buffer const & buffer, +FileName const includedFilename(Buffer const & buffer, InsetCommandParams const & params) { return makeAbsPath(to_utf8(params["filename"]), @@ -318,8 +318,7 @@ docstring const InsetInclude::getScreenLabel(Buffer const &) const if (params_["filename"].empty()) temp += "???"; else - // FIXME: We don't know the encoding of the filename - temp += from_ascii(onlyFilename(to_utf8(params_["filename"]))); + temp += from_utf8(onlyFilename(to_utf8(params_["filename"]))); return temp; } @@ -333,7 +332,7 @@ Buffer * getChildBuffer(Buffer const & buffer, InsetCommandParams const & params if (isVerbatim(params)) return 0; - string const included_file = includedFilename(buffer, params); + string const included_file = includedFilename(buffer, params).absFilename(); if (!isLyXFilename(included_file)) return 0; @@ -347,16 +346,16 @@ bool loadIfNeeded(Buffer const & buffer, InsetCommandParams const & params) if (isVerbatim(params)) return false; - string const included_file = includedFilename(buffer, params); - if (!isLyXFilename(included_file)) + FileName const included_file = includedFilename(buffer, params); + if (!isLyXFilename(included_file.absFilename())) return false; - Buffer * buf = theBufferList().getBuffer(included_file); + Buffer * buf = theBufferList().getBuffer(included_file.absFilename()); if (!buf) { // the readonly flag can/will be wrong, not anymore I think. - if (!fs::exists(included_file)) + if (!fs::exists(included_file.toFilesystemEncoding())) return false; - buf = theBufferList().newBuffer(included_file); + buf = theBufferList().newBuffer(included_file.absFilename()); if (!loadLyXFile(buf, included_file)) return false; } @@ -378,21 +377,21 @@ int InsetInclude::latex(Buffer const & buffer, odocstream & os, if (incfile.empty()) return 0; - string const included_file = includedFilename(buffer, params_); + FileName const included_file(includedFilename(buffer, params_)); Buffer const * const m_buffer = buffer.getMasterBuffer(); // if incfile is relative, make it relative to the master // buffer directory. if (!absolutePath(incfile)) { - incfile = makeRelPath(included_file, + incfile = makeRelPath(included_file.absFilename(), m_buffer->filePath()); } // write it to a file (so far the complete file) string const exportfile = changeExtension(incfile, ".tex"); - string const mangled = DocFileName(changeExtension(included_file, + string const mangled = DocFileName(changeExtension(included_file.absFilename(), ".tex")).mangledFilename(); - string const writefile = makeAbsPath(mangled, m_buffer->temppath()); + FileName const writefile(makeAbsPath(mangled, m_buffer->temppath())); if (!runparams.nice) incfile = mangled; @@ -404,14 +403,14 @@ int InsetInclude::latex(Buffer const & buffer, odocstream & os, // Don't try to load or copy the file ; else if (loadIfNeeded(buffer, params_)) { - Buffer * tmp = theBufferList().getBuffer(included_file); + Buffer * tmp = theBufferList().getBuffer(included_file.absFilename()); if (tmp->params().textclass != m_buffer->params().textclass) { // FIXME UNICODE docstring text = bformat(_("Included file `%1$s'\n" "has textclass `%2$s'\n" "while parent file has textclass `%3$s'."), - makeDisplayPath(included_file), + makeDisplayPath(included_file.absFilename()), from_utf8(tmp->params().getLyXTextClass().name()), from_utf8(m_buffer->params().getLyXTextClass().name())); Alert::warning(_("Different textclasses"), text); @@ -443,7 +442,7 @@ int InsetInclude::latex(Buffer const & buffer, odocstream & os, lyxerr[Debug::LATEX] << to_utf8(bformat(_("Could not copy the file\n%1$s\n" "into the temporary directory."), - from_utf8(included_file))) + from_utf8(included_file.absFilename()))) << endl; return 0; } @@ -462,7 +461,7 @@ int InsetInclude::latex(Buffer const & buffer, odocstream & os, exportfile); // \input wants file with extension (default is .tex) - if (!isLyXFilename(included_file)) { + if (!isLyXFilename(included_file.absFilename())) { incfile = latex_path(incfile); // FIXME UNICODE os << '\\' << from_ascii(params_.getCmdName()) @@ -515,16 +514,16 @@ int InsetInclude::docbook(Buffer const & buffer, odocstream & os, if (incfile.empty()) return 0; - string const included_file = includedFilename(buffer, params_); + string const included_file = includedFilename(buffer, params_).absFilename(); // write it to a file (so far the complete file) string const exportfile = changeExtension(incfile, ".sgml"); - string writefile = changeExtension(included_file, ".sgml"); + DocFileName writefile(changeExtension(included_file, ".sgml")); if (loadIfNeeded(buffer, params_)) { Buffer * tmp = theBufferList().getBuffer(included_file); - string const mangled = DocFileName(writefile).mangledFilename(); + string const mangled = writefile.mangledFilename(); writefile = makeAbsPath(mangled, buffer.getMasterBuffer()->temppath()); if (!runparams.nice) @@ -560,7 +559,7 @@ void InsetInclude::validate(LaTeXFeatures & features) const Buffer const & buffer = features.buffer(); - string const included_file = includedFilename(buffer, params_); + string const included_file = includedFilename(buffer, params_).absFilename(); if (isLyXFilename(included_file)) writefile = changeExtension(included_file, ".sgml"); @@ -570,7 +569,7 @@ void InsetInclude::validate(LaTeXFeatures & features) const if (!features.runparams().nice && !isVerbatim(params_)) { incfile = DocFileName(writefile).mangledFilename(); writefile = makeAbsPath(incfile, - buffer.getMasterBuffer()->temppath()); + buffer.getMasterBuffer()->temppath()).absFilename(); } features.includeFile(include_label, writefile); @@ -600,7 +599,7 @@ void InsetInclude::getLabelList(Buffer const & buffer, std::vector & list) const { if (loadIfNeeded(buffer, params_)) { - string const included_file = includedFilename(buffer, params_); + string const included_file = includedFilename(buffer, params_).absFilename(); Buffer * tmp = theBufferList().getBuffer(included_file); tmp->setParentName(""); tmp->getLabelList(list); @@ -610,10 +609,10 @@ void InsetInclude::getLabelList(Buffer const & buffer, void InsetInclude::fillWithBibKeys(Buffer const & buffer, - std::vector > & keys) const + std::vector > & keys) const { if (loadIfNeeded(buffer, params_)) { - string const included_file = includedFilename(buffer, params_); + string const included_file = includedFilename(buffer, params_).absFilename(); Buffer * tmp = theBufferList().getBuffer(included_file); tmp->setParentName(""); tmp->fillWithBibKeys(keys); @@ -633,22 +632,22 @@ void InsetInclude::updateBibfilesCache(Buffer const & buffer) } -std::vector const & +std::vector const & InsetInclude::getBibfilesCache(Buffer const & buffer) const { Buffer * const tmp = getChildBuffer(buffer, params_); if (tmp) { tmp->setParentName(""); - std::vector const & cache = tmp->getBibfilesCache(); + std::vector const & cache = tmp->getBibfilesCache(); tmp->setParentName(parentFilename(buffer)); return cache; } - static std::vector const empty; + static std::vector const empty; return empty; } -void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const +bool InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const { BOOST_ASSERT(mi.base.bv && mi.base.bv->buffer()); @@ -673,7 +672,9 @@ void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const Box b(0, dim.wid, -dim.asc, dim.des); button_.setBox(b); + bool const changed = dim_ != dim; dim_ = dim; + return changed; } @@ -724,7 +725,7 @@ namespace { bool preview_wanted(InsetCommandParams const & params, Buffer const & buffer) { - string const included_file = includedFilename(buffer, params); + FileName const included_file = includedFilename(buffer, params); return type(params) == INPUT && params.preview() && isFileReadable(included_file);