]> git.lyx.org Git - features.git/blobdiff - src/Buffer.cpp
move updateLables to buffer
[features.git] / src / Buffer.cpp
index 44e35ab607e48a77e6bc55397a6a21526e3874c1..d7ab7ab52e4b202b88990d524b0eb095f3df0b26 100644 (file)
@@ -3,7 +3,7 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  * \author Stefan Schimanski
  *
  * Full author contact details are available in file CREDITS.
@@ -117,7 +117,7 @@ namespace {
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-int const LYX_FORMAT = 344;  // ps: backref
+int const LYX_FORMAT = 345;  // jamatos: xml elements
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
@@ -374,6 +374,12 @@ string const Buffer::temppath() const
 }
 
 
+TexRow & Buffer::texrow()
+{
+       return d->texrow;
+}
+
+
 TexRow const & Buffer::texrow() const
 {
        return d->texrow;
@@ -956,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;
@@ -1175,7 +1181,7 @@ void Buffer::makeDocBookFile(FileName const & fname,
 {
        LYXERR(Debug::LATEX, "makeDocBookFile...");
 
-       odocfstream ofs;
+       ofdocstream ofs;
        if (!openFileWrite(ofs, fname))
                return;
 
@@ -2637,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