]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Limit the nopassthurchars case in beamer to URL
[lyx.git] / src / Buffer.cpp
index e837a9b55284ed282d5dcd51620c62c20a2f46b9..6dea0a44e7eaca38a45d0b75e8609698876232d0 100644 (file)
@@ -41,7 +41,6 @@
 #include "LaTeXFeatures.h"
 #include "LaTeX.h"
 #include "Layout.h"
-#include "Lexer.h"
 #include "LyXAction.h"
 #include "LyX.h"
 #include "LyXRC.h"
@@ -95,6 +94,7 @@
 #include "support/filetools.h"
 #include "support/gettext.h"
 #include "support/gzstream.h"
+#include "support/Lexer.h"
 #include "support/lstrings.h"
 #include "support/mutex.h"
 #include "support/os.h"
@@ -1882,7 +1882,8 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os,
        // This is only set once per document (in master)
        if (!runparams.is_child) {
                runparams.use_polyglossia = features.usePolyglossia();
-               runparams.use_hyperref = features.isRequired("hyperref");
+               runparams.use_hyperref = features.isRequired("hyperref")
+                               || features.isProvided("hyperref");
                runparams.use_CJK = features.mustProvide("CJK");
        }
        LYXERR(Debug::OUTFILE, "  Buffer validation done.");
@@ -2422,7 +2423,7 @@ void Buffer::validate(LaTeXFeatures & features) const
 }
 
 
-void Buffer::getLabelList(vector<std::pair<docstring, docstring>> & list) const
+void Buffer::getLabelList(vector<std::tuple<docstring, docstring, docstring>> & list) const
 {
        // If this is a child document, use the master's list instead.
        if (parent()) {
@@ -2433,8 +2434,9 @@ void Buffer::getLabelList(vector<std::pair<docstring, docstring>> & list) const
        list.clear();
        shared_ptr<Toc> toc = d->toc_backend.toc("label");
        for (auto const & tocit : *toc) {
-               if (tocit.depth() == 0)
-                       list.push_back(make_pair(tocit.str(), tocit.asString()));
+               if (tocit.depth() == 0) {
+                       list.push_back(make_tuple(tocit.str(), tocit.asString(), tocit.prettyStr()));
+               }
        }
 }
 
@@ -2443,7 +2445,7 @@ void Buffer::invalidateBibinfoCache() const
 {
        d->bibinfo_cache_valid_ = false;
        d->cite_labels_valid_ = false;
-       removeBiblioTempFiles();
+       scheduleBiblioTempRemoval();
        // also invalidate the cache for the parent buffer
        Buffer const * const pbuf = d->parent();
        if (pbuf)
@@ -2701,6 +2703,7 @@ void Buffer::removeBiblioTempFiles() const
        Buffer const * const pbuf = parent();
        if (pbuf)
                pbuf->removeBiblioTempFiles();
+       removeBiblioTemps = false;
 }
 
 
@@ -4206,7 +4209,8 @@ unique_ptr<TexRow> Buffer::getSourceCode(odocstream & os, string const & format,
                        validate(features);
                        runparams.use_polyglossia = features.usePolyglossia();
                        runparams.use_babel = features.useBabel();
-                       runparams.use_hyperref = features.isRequired("hyperref");
+                       runparams.use_hyperref = features.isRequired("hyperref")
+                               || features.isProvided("hyperref");
                        // latex or literate
                        otexstream ots(os);
                        // output above
@@ -4474,6 +4478,8 @@ void Buffer::setMathFlavor(OutputParams & op) const
 Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir,
        bool includeall, string & result_file) const
 {
+       if (removeBiblioTemps)
+               removeBiblioTempFiles();
        LYXERR(Debug::FILES, "target=" << target);
        OutputParams runparams(&params().encoding());
        string format = target;
@@ -5341,6 +5347,10 @@ void Buffer::Impl::setLabel(ParIterator & it, UpdateType utype) const
 
 void Buffer::updateBuffer(ParIterator & parit, UpdateType utype, bool const deleted) const
 {
+       // if fomatted references are shown in workarea update buffer accordingly
+       if (params().use_formatted_ref)
+               utype = OutputUpdate;
+
        pushIncludedBuffer(this);
        // LASSERT: Is it safe to continue here, or should we just return?
        LASSERT(parit.pit() == 0, /**/);
@@ -5551,19 +5561,28 @@ Buffer::ReadStatus Buffer::reload()
        docstring const disp_fn = makeDisplayPath(d->filename.absFileName());
 
        // clear parent. this will get reset if need be.
+       Buffer const * oldparent = d->parent();
        d->setParent(nullptr);
        ReadStatus const status = loadLyXFile();
+       // The inset members in cursors held by buffer views are now wrong.
+       workAreaManager().sanitizeCursors();
+       setBusy(false);
        if (status == ReadSuccess) {
                updateBuffer();
                changed(true);
                updateTitles();
+               // reset parent if this hasn't been done yet
+               // but only if this is still its child (e.g.,
+               // not after the former child has been saved as...) 
+               if (!d->parent() && oldparent && oldparent->isFullyLoaded()
+                   && oldparent->isChild(this))
+                       d->setParent(oldparent);
                markClean();
                message(bformat(_("Document %1$s reloaded."), disp_fn));
                d->undo_.clear();
        } else {
                message(bformat(_("Could not reload document %1$s."), disp_fn));
        }
-       setBusy(false);
        removePreviews();
        updatePreviews();
        errors("Parse");
@@ -5710,15 +5729,24 @@ void Buffer::Impl::fileExternallyModified(bool const exists)
                       "checksum unchanged: " << filename);
                return;
        }
+       lyx_clean = false;
        // If the file has been deleted, only mark the file as dirty since it is
        // pointless to prompt for reloading. If later a file is moved into this
        // location, then the externally modified warning will appear then.
        if (exists)
-                       externally_modified_ = true;
+               externally_modified_ = true;
        // Update external modification notification.
        // Dirty buffers must be visible at all times.
-       if (wa_ && wa_->unhide(owner_))
+       if (wa_ && wa_->unhide(owner_)) {
                wa_->updateTitles();
+               if (!exists) {
+                       frontend::Alert::warning(
+                               _("File deleted from disk"),
+                               bformat(_("The file\n  %1$s\n"
+                                          "has been deleted from disk!"),
+                                       from_utf8(filename.absFileName())));
+               }
+       }
        else
                // Unable to unhide the buffer (e.g. no GUI or not current View)
                lyx_clean = true;