]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetInclude.cpp
Pure HTML output for math macros.
[lyx.git] / src / insets / InsetInclude.cpp
index f2304557b5763c73a655c5df49f9c3c7f589a201..777d28e701700c5a503611385b5bbe991c7ee048 100644 (file)
@@ -29,7 +29,6 @@
 #include "LayoutFile.h"
 #include "LayoutModuleList.h"
 #include "LyX.h"
-#include "LyXFunc.h"
 #include "LyXRC.h"
 #include "Lexer.h"
 #include "MetricsInfo.h"
@@ -403,28 +402,27 @@ Buffer * InsetInclude::getChildBuffer() const
 
 Buffer * InsetInclude::loadIfNeeded() const
 {
-       // This is for background export and preview. We don't want to load the
-       // cloned child document again.
-       if (child_buffer_ && theBufferList().isLoaded(child_buffer_)
-                 && child_buffer_->isClone())
+       // This is for background export and preview. We don't even want to
+       // try to load the cloned child document again.
+       if (buffer().isClone())
                return child_buffer_;
-
+       
        // Don't try to load it again if we failed before.
        if (failedtoload_ || isVerbatim(params()) || isListings(params()))
                return 0;
 
+       FileName const included_file = includedFilename(buffer(), params());
        // Use cached Buffer if possible.
        if (child_buffer_ != 0) {
-               if (theBufferList().isLoaded(child_buffer_))
+               if (theBufferList().isLoaded(child_buffer_)
+               // additional sanity check: make sure the Buffer really is
+                   // associated with the file we want.
+                   && child_buffer_ == theBufferList().getBuffer(included_file))
                        return child_buffer_;
                // Buffer vanished, so invalidate cache and try to reload.
                child_buffer_ = 0;
        }
 
-       string const parent_filename = buffer().absFileName();
-       FileName const included_file = 
-               makeAbsPath(to_utf8(params()["filename"]), onlyPath(parent_filename));
-
        if (!isLyXFilename(included_file.absFilename()))
                return 0;
 
@@ -680,9 +678,7 @@ docstring InsetInclude::xhtml(XHTMLStream & xs, OutputParams const &rp) const
        // 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.)
-       string const parent_filename = buffer().absFileName();
-       FileName const included_file = 
-               makeAbsPath(to_utf8(params()["filename"]), onlyPath(parent_filename));
+       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 "
@@ -1048,18 +1044,18 @@ void InsetInclude::updateCommand()
        setParams(p);   
 }
 
-void InsetInclude::updateLabels(ParIterator const & it, UpdateType utype)
+void InsetInclude::updateBuffer(ParIterator const & it, UpdateType utype)
 {
        Buffer const * const childbuffer = getChildBuffer();
        if (childbuffer) {
-               childbuffer->updateLabels(Buffer::UpdateChildOnly, utype);
+               childbuffer->updateBuffer(Buffer::UpdateChildOnly, utype);
                return;
        }
        if (!isListings(params()))
                return;
 
        if (label_)
-               label_->updateLabels(it, utype);
+               label_->updateBuffer(it, utype);
 
        InsetListingsParams const par(to_utf8(params()["lstparams"]));
        if (par.getParamValue("caption").empty()) {