X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBuffer.cpp;h=8105d5261ba8b57006528033b55105e4116f2080;hb=2420f5ed1e9fe98c6273de3c9d661641aefc011b;hp=d977e2c2112e45a8dade542c17cafbcfebdd3a78;hpb=0aca981637b878faab4893998e47abf7388d821d;p=lyx.git diff --git a/src/Buffer.cpp b/src/Buffer.cpp index d977e2c211..8105d5261b 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -779,7 +779,7 @@ Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & filename, bformat(_("%1$s is from a different" " version of LyX, but a temporary" " file for converting it could" - " not be created."), + " not be created."), from_utf8(filename.absFilename()))); return failure; } @@ -789,7 +789,7 @@ Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & filename, bformat(_("%1$s is from a different" " version of LyX, but the" " conversion script lyx2lyx" - " could not be found."), + " could not be found."), from_utf8(filename.absFilename()))); return failure; } @@ -808,7 +808,7 @@ Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & filename, Alert::error(_("Conversion script failed"), bformat(_("%1$s is from a different version" " of LyX, but the lyx2lyx script" - " failed to convert it."), + " failed to convert it."), from_utf8(filename.absFilename()))); return failure; } else { @@ -1368,10 +1368,10 @@ void Buffer::getLabelList(vector & list) const } -void Buffer::updateBibfilesCache() const +void Buffer::updateBibfilesCache(UpdateScope scope) const { // If this is a child document, use the parent's cache instead. - if (d->parent_buffer) { + if (d->parent_buffer && scope != UpdateChildOnly) { d->parent_buffer->updateBibfilesCache(); return; } @@ -1390,7 +1390,7 @@ void Buffer::updateBibfilesCache() const static_cast(*it); inset.updateBibfilesCache(); support::FileNameList const & bibfiles = - inset.getBibfilesCache(*this); + inset.getBibfilesCache(); d->bibfilesCache_.insert(d->bibfilesCache_.end(), bibfiles.begin(), bibfiles.end()); @@ -1407,15 +1407,15 @@ void Buffer::invalidateBibinfoCache() } -support::FileNameList const & Buffer::getBibfilesCache() const +support::FileNameList const & Buffer::getBibfilesCache(UpdateScope scope) const { // If this is a child document, use the parent's cache instead. - if (d->parent_buffer) + if (d->parent_buffer && scope != UpdateChildOnly) return d->parent_buffer->getBibfilesCache(); // We update the cache when first used instead of at loading time. if (d->bibfilesCache_.empty()) - const_cast(this)->updateBibfilesCache(); + const_cast(this)->updateBibfilesCache(scope); return d->bibfilesCache_; } @@ -1765,6 +1765,25 @@ DocIterator Buffer::firstChildPosition(Buffer const * child) } +std::vector Buffer::getChildren() const +{ + std::vector clist; + // loop over children + Impl::BufferPositionMap::iterator it = d->children_positions.begin(); + Impl::BufferPositionMap::iterator end = d->children_positions.end(); + for (; it != end; ++it) { + Buffer * child = const_cast(it->first); + clist.push_back(child); + // there might be grandchildren + std::vector glist = child->getChildren(); + for (vector::const_iterator git = glist.begin(); + git != glist.end(); ++git) + clist.push_back(*git); + } + return clist; +} + + template typename M::iterator greatest_below(M & m, typename M::key_type const & x) { @@ -1929,8 +1948,7 @@ void Buffer::updateMacros(DocIterator & it, DocIterator & scope) const // is it a nested text inset? if (iit->inset->asInsetText()) { // Inset needs its own scope? - InsetText const * itext - = iit->inset->asInsetText(); + InsetText const * itext = iit->inset->asInsetText(); bool newScope = itext->isMacroScope(); // scope which ends just behind the inset @@ -1947,19 +1965,19 @@ void Buffer::updateMacros(DocIterator & it, DocIterator & scope) const // is it an external file? if (iit->inset->lyxCode() == INCLUDE_CODE) { // get buffer of external file - InsetInclude const & inset - = static_cast(*iit->inset); + InsetInclude const & inset = + static_cast(*iit->inset); d->macro_lock = true; - Buffer * child = inset.loadIfNeeded(*this); + Buffer * child = inset.getChildBuffer(); d->macro_lock = false; if (!child) continue; // register its position, but only when it is // included first in the buffer - if (d->children_positions.find(child) - == d->children_positions.end()) - d->children_positions[child] = it; + if (d->children_positions.find(child) == + d->children_positions.end()) + d->children_positions[child] = it; // register child with its scope d->position_to_children[it] = Impl::ScopeBuffer(scope, child); @@ -1970,8 +1988,8 @@ void Buffer::updateMacros(DocIterator & it, DocIterator & scope) const continue; // get macro data - MathMacroTemplate & macroTemplate - = static_cast(*iit->inset); + MathMacroTemplate & macroTemplate = + static_cast(*iit->inset); MacroContext mc(*this, it); macroTemplate.updateToContext(mc); @@ -2710,7 +2728,13 @@ void Buffer::bufferErrors(TeXErrors const & terr, ErrorList & errorList) const } -void Buffer::updateLabels(bool childonly) const +void Buffer::setBuffersForInsets() const +{ + inset().setBuffer(const_cast(*this)); +} + + +void Buffer::updateLabels(UpdateScope scope) const { // Use the master text class also for child documents Buffer const * const master = masterBuffer(); @@ -2720,11 +2744,11 @@ void Buffer::updateLabels(bool childonly) const // 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 bufToUpdate; - if (!childonly) { + if (scope == UpdateMaster) { // If this is a child document start with the master if (master != this) { bufToUpdate.insert(this); - master->updateLabels(false); + master->updateLabels(); // Do this here in case the master has no gui associated with it. Then, // the TocModel is not updated and TocModel::toc_ is invalid (bug 5699). if (!master->gui_) @@ -2744,7 +2768,6 @@ void Buffer::updateLabels(bool childonly) const // update all caches clearReferenceCache(); - inset().setBuffer(const_cast(*this)); updateMacros(); Buffer & cbuf = const_cast(*this); @@ -2760,7 +2783,7 @@ void Buffer::updateLabels(bool childonly) const return; cbuf.tocBackend().update(); - if (!childonly) + if (scope == UpdateMaster) cbuf.structureChanged(); }