#include "support/lstrings.h" // contains
#include "support/lyxalgo.h"
-#include <boost/bind.hpp>
+#include "support/bind.h"
using namespace std;
using namespace lyx::support;
void add_preview(RenderMonitoredPreview &, InsetInclude const &, Buffer const &);
-string const parentFilename(Buffer const & buffer)
+string const parentFileName(Buffer const & buffer)
{
return buffer.absFileName();
}
-FileName const includedFilename(Buffer const & buffer,
+FileName const includedFileName(Buffer const & buffer,
InsetCommandParams const & params)
{
return makeAbsPath(to_utf8(params["filename"]),
- onlyPath(parentFilename(buffer)));
+ onlyPath(parentFileName(buffer)));
}
InsetInclude::InsetInclude(Buffer * buf, InsetCommandParams const & p)
- : InsetCommand(buf, p, "include"), include_label(uniqueID()),
+ : InsetCommand(buf, p), include_label(uniqueID()),
preview_(new RenderMonitoredPreview(this)), failedtoload_(false),
set_label_(false), label_(0), child_buffer_(0)
{
- preview_->fileChanged(boost::bind(&InsetInclude::fileChanged, this));
+ preview_->fileChanged(bind(&InsetInclude::fileChanged, this));
if (isListings(params())) {
InsetListingsParams listing_params(to_utf8(p["lstparams"]));
preview_(new RenderMonitoredPreview(this)), failedtoload_(false),
set_label_(false), label_(0), child_buffer_(0)
{
- preview_->fileChanged(boost::bind(&InsetInclude::fileChanged, this));
+ preview_->fileChanged(bind(&InsetInclude::fileChanged, this));
if (other.label_)
label_ = new InsetLabel(*other.label_);
InsetInclude::~InsetInclude()
{
+ if (isBufferLoaded())
+ buffer().invalidateBibfileCache();
delete label_;
}
}
case LFUN_INSET_MODIFY: {
- // It should be OK just to invalidate the cache is setParams()
+ // It should be OK just to invalidate the cache in setParams()
// If not....
// child_buffer_ = 0;
InsetCommandParams p(INCLUDE_CODE);
InsetCommand::doDispatch(cur, cmd);
p = params();
} else
- InsetCommand::string2params("include", to_utf8(cmd.argument()), p);
+ InsetCommand::string2params(to_utf8(cmd.argument()), p);
if (!p.getCmdName().empty()) {
if (isListings(p)){
InsetListingsParams new_params(to_utf8(p["lstparams"]));
}
}
setParams(p);
+ cur.forceBufferUpdate();
} else
- cur.noUpdate();
+ cur.noScreenUpdate();
break;
}
if (type(params()) == INPUT)
add_preview(*preview_, *this, buffer());
- buffer().updateBibfilesCache();
+ buffer().invalidateBibfileCache();
}
if (failedtoload_ || isVerbatim(params()) || isListings(params()))
return 0;
- FileName const included_file = includedFilename(buffer(), params());
+ FileName const included_file = includedFileName(buffer(), params());
// Use cached Buffer if possible.
if (child_buffer_ != 0) {
if (theBufferList().isLoaded(child_buffer_)
child_buffer_ = 0;
}
- if (!isLyXFilename(included_file.absFileName()))
+ if (!isLyXFileName(included_file.absFileName()))
return 0;
Buffer * child = theBufferList().getBuffer(included_file);
// Buffer creation is not possible.
return 0;
- if (!child->loadLyXFile(included_file)) {
+ if (child->loadLyXFile(included_file) != Buffer::ReadSuccess) {
failedtoload_ = true;
//close the buffer we just opened
theBufferList().release(child);
if (incfile.empty())
return 0;
- FileName const included_file = includedFilename(buffer(), params());
+ FileName const included_file = includedFileName(buffer(), params());
// Check we're not trying to include ourselves.
// FIXME RECURSIVE INCLUDE
if (!runparams.nice)
incfile = mangled;
- else if (!isValidLaTeXFilename(incfile)) {
+ else if (!isValidLaTeXFileName(incfile)) {
frontend::Alert::warning(_("Invalid filename"),
- _("The following filename is likely to cause trouble "
- "when running the exported file through LaTeX: ") +
- from_utf8(incfile));
+ _("The following filename will cause troubles "
+ "when running the exported file through LaTeX: ") +
+ from_utf8(incfile));
+ }
+ else if (!isValidDVIFileName(incfile)) {
+ frontend::Alert::warning(_("Problematic filename for DVI"),
+ _("The following filename can cause troubles "
+ "when running the exported file through LaTeX "
+ "and opening the resulting DVI: ") +
+ from_utf8(incfile), true);
}
LYXERR(Debug::LATEX, "incfile:" << incfile);
LYXERR(Debug::LATEX, "exportfile:" << exportfile);
//Don't try to load or copy the file if we're
//in a comment or doing a dryrun
} else if (isInputOrInclude(params()) &&
- isLyXFilename(included_file.absFileName())) {
- //if it's a LyX file and we're inputting or including,
- //try to load it so we can write the associated latex
- if (!loadIfNeeded())
+ isLyXFileName(included_file.absFileName())) {
+ // if it's a LyX file and we're inputting or including,
+ // try to load it so we can write the associated latex
+
+ Buffer * tmp = loadIfNeeded();
+ if (!tmp)
return false;
- Buffer * tmp = theBufferList().getBuffer(included_file);
-
if (tmp->params().baseClass() != masterBuffer->params().baseClass()) {
// FIXME UNICODE
docstring text = bformat(_("Included file `%1$s'\n"
exportfile);
// \input wants file with extension (default is .tex)
- if (!isLyXFilename(included_file.absFileName())) {
+ if (!isLyXFileName(included_file.absFileName())) {
incfile = latex_path(incfile);
// FIXME UNICODE
os << '\\' << from_ascii(params().getCmdName())
if (listing)
xs << html::StartTag("pre");
// FIXME: We don't know the encoding of the file, default to UTF-8.
- xs << includedFilename(buffer(), params()).fileContents("UTF-8");
+ xs << includedFileName(buffer(), params()).fileContents("UTF-8");
if (listing)
xs << html::EndTag("pre");
return docstring();
// We don't (yet) know how to Input or Include non-LyX files.
// (If we wanted to get really arcane, we could run some tex2html
// converter on the included file. But that's just masochistic.)
- FileName const included_file = includedFilename(buffer(), params());
- if (!isLyXFilename(included_file.absFileName())) {
+ FileName const included_file = includedFileName(buffer(), params());
+ if (!isLyXFileName(included_file.absFileName())) {
frontend::Alert::warning(_("Unsupported Inclusion"),
bformat(_("LyX does not know how to include non-LyX files when "
"generating HTML output. Offending file:\n%1$s"),
if (isVerbatim(params()) || isListings(params())) {
os << '[' << screenLabel() << '\n';
// FIXME: We don't know the encoding of the file, default to UTF-8.
- os << includedFilename(buffer(), params()).fileContents("UTF-8");
+ os << includedFileName(buffer(), params()).fileContents("UTF-8");
os << "\n]";
return PLAINTEXT_NEWLINE + 1; // one char on a separate line
} else {
if (incfile.empty())
return 0;
- string const included_file = includedFilename(buffer(), params()).absFileName();
+ string const included_file = includedFileName(buffer(), params()).absFileName();
// Check we're not trying to include ourselves.
// FIXME RECURSIVE INCLUDE
string const exportfile = changeExtension(incfile, ".sgml");
DocFileName writefile(changeExtension(included_file, ".sgml"));
- if (loadIfNeeded()) {
- Buffer * tmp = theBufferList().getBuffer(FileName(included_file));
-
+ Buffer * tmp = loadIfNeeded();
+ if (tmp) {
string const mangled = writefile.mangledFileName();
writefile = makeAbsPath(mangled,
buffer().masterBuffer()->temppath());
LASSERT(&buffer() == &features.buffer(), /**/);
string const included_file =
- includedFilename(buffer(), params()).absFileName();
+ includedFileName(buffer(), params()).absFileName();
- if (isLyXFilename(included_file))
+ if (isLyXFileName(included_file))
writefile = changeExtension(included_file, ".sgml");
else
writefile = included_file;
// Here we must do the fun stuff...
// Load the file in the include if it needs
// to be loaded:
- if (loadIfNeeded()) {
- // a file got loaded
- Buffer * const tmp = theBufferList().getBuffer(FileName(included_file));
+ Buffer * const tmp = loadIfNeeded();
+ if (tmp) {
+ // the file is loaded
// make sure the buffer isn't us
// FIXME RECURSIVE INCLUDES
// This is not sufficient, as recursive includes could be
void InsetInclude::fillWithBibKeys(BiblioInfo & keys,
InsetIterator const & /*di*/) const
{
- if (loadIfNeeded()) {
- string const included_file = includedFilename(buffer(), params()).absFileName();
- Buffer * tmp = theBufferList().getBuffer(FileName(included_file));
- BiblioInfo const & newkeys = tmp->localBibInfo();
- keys.mergeBiblioInfo(newkeys);
- }
-}
-
-
-void InsetInclude::updateBibfilesCache()
-{
- Buffer const * const child = getChildBuffer();
- if (child)
- child->updateBibfilesCache(Buffer::UpdateChildOnly);
-}
-
-
-support::FileNameList const &
- InsetInclude::getBibfilesCache() const
-{
- Buffer const * const child = getChildBuffer();
- if (child)
- return child->getBibfilesCache(Buffer::UpdateChildOnly);
-
- static support::FileNameList const empty;
- return empty;
+ Buffer * child = loadIfNeeded();
+ if (!child)
+ return;
+ child->fillWithBibKeys(keys);
}
bool preview_wanted(InsetCommandParams const & params, Buffer const & buffer)
{
- FileName const included_file = includedFilename(buffer, params);
+ FileName const included_file = includedFileName(buffer, params);
return type(params) == INPUT && params.preview() &&
included_file.isReadableFile();
InsetCommandParams const & params = inset.params();
if (RenderPreview::status() != LyXRC::PREVIEW_OFF &&
preview_wanted(params, buffer)) {
- renderer.setAbsFile(includedFilename(buffer, params));
+ renderer.setAbsFile(includedFileName(buffer, params));
docstring const snippet = latexString(inset);
renderer.addPreview(snippet, buffer);
}
Buffer const & buffer = ploader.buffer();
if (!preview_wanted(params(), buffer))
return;
- preview_->setAbsFile(includedFilename(buffer, params()));
+ preview_->setAbsFile(includedFileName(buffer, params()));
docstring const snippet = latexString(*this);
preview_->addPreview(snippet, ploader);
}