]> git.lyx.org Git - features.git/blobdiff - src/Buffer.cpp
move updateLables to buffer
[features.git] / src / Buffer.cpp
index fe9524d24ce40b7d34abf54d25fe6528415d8b01..d7ab7ab52e4b202b88990d524b0eb095f3df0b26 100644 (file)
@@ -95,8 +95,8 @@
 #include "support/types.h"
 
 #include <boost/bind.hpp>
+#include <boost/shared_ptr.hpp>
 
-#include <tr1/memory>
 #include <algorithm>
 #include <fstream>
 #include <iomanip>
 #include <vector>
 
 using namespace std;
-using namespace std::tr1;
 using namespace lyx::support;
 
 namespace lyx {
@@ -963,7 +962,7 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
        string const encoding = runparams.encoding->iconvName();
        LYXERR(Debug::LATEX, "makeLaTeXFile encoding: " << encoding << "...");
 
-       odocfstream ofs;
+       ofdocstream ofs;
        try { ofs.reset(encoding); }
        catch (iconv_codecvt_facet_exception & e) {
                lyxerr << "Caught iconv exception: " << e.what() << endl;
@@ -1182,7 +1181,7 @@ void Buffer::makeDocBookFile(FileName const & fname,
 {
        LYXERR(Debug::LATEX, "makeDocBookFile...");
 
-       odocfstream ofs;
+       ofdocstream ofs;
        if (!openFileWrite(ofs, fname))
                return;
 
@@ -2236,8 +2235,7 @@ void Buffer::setGuiDelegate(frontend::GuiBufferDelegate * gui)
 
 namespace {
 
-class AutoSaveBuffer : public ForkedProcess
-{
+class AutoSaveBuffer : public ForkedProcess {
 public:
        ///
        AutoSaveBuffer(Buffer const & buffer, FileName const & fname)
@@ -2645,4 +2643,56 @@ void Buffer::bufferErrors(TeXErrors const & terr, ErrorList & errorList) const
 }
 
 
+// FIXME: buf should should be const because updateLabels() modifies
+// the contents of the paragraphs.
+void Buffer::updateLabels(bool childonly) const
+{
+       // Use the master text class also for child documents
+       Buffer const * const master = masterBuffer();
+       DocumentClass const & textclass = master->params().documentClass();
+
+       // keep the buffers to be children in this set. If the call from the
+       // master comes back we can see which of them were actually seen (i.e.
+       // via an InsetInclude). The remaining ones in the set need still be updated.
+       static std::set<Buffer const *> bufToUpdate;
+       if (!childonly) {
+               // If this is a child document start with the master
+               if (master != this) {
+                       bufToUpdate.insert(this);
+                       master->updateLabels(false);
+
+                       // was buf referenced from the master (i.e. not in bufToUpdate anymore)?
+                       if (bufToUpdate.find(this) == bufToUpdate.end())
+                               return;
+               }
+
+               // start over the counters in the master
+               textclass.counters().reset();
+       }
+
+       // update will be done below for this buffer
+       bufToUpdate.erase(this);
+
+       // update all caches
+       clearReferenceCache();
+       inset().setBuffer(const_cast<Buffer &>(*this));
+       updateMacros();
+
+       Buffer & cbuf = const_cast<Buffer &>(*this);
+
+       LASSERT(!text().paragraphs().empty(), /**/);
+
+       // do the real work
+       ParIterator parit = cbuf.par_iterator_begin();
+       lyx::updateLabels(*this, parit);
+
+       if (master != this)
+               // TocBackend update will be done later.
+               return;
+
+       cbuf.tocBackend().update();
+       if (!childonly)
+               cbuf.structureChanged();
+}
+
 } // namespace lyx