]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Make sure that the new caching mechanism for flattened labels respects languages.
[lyx.git] / src / Buffer.cpp
index 1f1db9e4465b5aab840644fe2148619c1e0f2ef0..2d44472d4feeabfaa1ce87dcd9e045d75bd8f88c 100644 (file)
@@ -127,7 +127,7 @@ namespace {
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-int const LYX_FORMAT = 362;  // jspitzm: support applemac encoding
+int const LYX_FORMAT = 363;  // uwestoehr: support for longtable alignment
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
@@ -487,8 +487,8 @@ string Buffer::logName(LogType * type) const
                return bname.absFilename();
        // If we have a newer master file log or only a master log, show this
        } else if (fname != masterfname
-                  && (!fname.exists() && masterfname.exists()
-                  || fname.lastModified() < masterfname.lastModified())) {
+                  && (!fname.exists() && (masterfname.exists()
+                  || fname.lastModified() < masterfname.lastModified()))) {
                LYXERR(Debug::FILES, "Log name calculated as: " << masterfname);
                if (type)
                        *type = mtype;
@@ -1707,9 +1707,37 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
        }
 
        case LFUN_BRANCHES_RENAME: {
+               if (func.argument().empty())
+                       break;
+
                docstring const oldname = from_utf8(func.getArg(0));
                docstring const newname = from_utf8(func.getArg(1));
-               renameBranches(oldname, newname);
+               InsetIterator it  = inset_iterator_begin(inset());
+               InsetIterator const end = inset_iterator_end(inset());
+               bool success = false;
+               for (; it != end; ++it) {
+                       if (it->lyxCode() == BRANCH_CODE) {
+                               InsetBranch & ins = static_cast<InsetBranch &>(*it);
+                               if (ins.branch() == oldname) {
+                                       undo().recordUndo(it);
+                                       ins.rename(newname);
+                                       success = true;
+                                       continue;
+                               }
+                       }
+                       if (it->lyxCode() == INCLUDE_CODE) {
+                               // get buffer of external file
+                               InsetInclude const & ins =
+                                       static_cast<InsetInclude const &>(*it);
+                               Buffer * child = ins.getChildBuffer();
+                               if (!child)
+                                       continue;
+                               child->dispatch(func, dr);
+                       }
+               }
+
+               if (success)
+                       dr.update(Update::Force);
                break;
        }
 
@@ -2362,106 +2390,33 @@ void Buffer::updateMacros() const
 
 void Buffer::getUsedBranches(std::list<docstring> & result, bool const from_master) const
 {
-       // Iterate over buffer, starting with first paragraph
-       // The scope must be bigger than any lookup DocIterator
-       // later. For the global lookup, lastpit+1 is used, hence
-       // we use lastpit+2 here.
-       DocIterator it = par_iterator_begin();
-       DocIterator scope = it;
-       scope.pit() = scope.lastpit() + 2;
-       pit_type lastpit = it.lastpit();
-
-       while (it.pit() <= lastpit) {
-               Paragraph & par = it.paragraph();
-
-               // iterate over the insets of the current paragraph
-               InsetList const & insets = par.insetList();
-               InsetList::const_iterator iit = insets.begin();
-               InsetList::const_iterator end = insets.end();
-               for (; iit != end; ++iit) {
-                       it.pos() = iit->pos;
-
-                       if (iit->inset->lyxCode() == BRANCH_CODE) {
-                               // get buffer of external file
-                               InsetBranch const & br =
-                                       static_cast<InsetBranch const &>(*iit->inset);
-                               docstring const name = br.branch();
-                               if (!from_master && !params().branchlist().find(name))
-                                       result.push_back(name);
-                               else if (from_master && !masterBuffer()->params().branchlist().find(name))
-                                       result.push_back(name);
+       InsetIterator it  = inset_iterator_begin(inset());
+       InsetIterator const end = inset_iterator_end(inset());
+       for (; it != end; ++it) {
+               if (it->lyxCode() == BRANCH_CODE) {
+                       InsetBranch & br = static_cast<InsetBranch &>(*it);
+                       docstring const name = br.branch();
+                       if (!from_master && !params().branchlist().find(name))
+                               result.push_back(name);
+                       else if (from_master && !masterBuffer()->params().branchlist().find(name))
+                               result.push_back(name);
+                       continue;
+               }
+               if (it->lyxCode() == INCLUDE_CODE) {
+                       // get buffer of external file
+                       InsetInclude const & ins =
+                               static_cast<InsetInclude const &>(*it);
+                       Buffer * child = ins.getChildBuffer();
+                       if (!child)
                                continue;
-                       }
-
-                       // is it an external file?
-                       if (iit->inset->lyxCode() == INCLUDE_CODE) {
-                               // get buffer of external file
-                               InsetInclude const & inset =
-                                       static_cast<InsetInclude const &>(*iit->inset);
-                               Buffer * child = inset.getChildBuffer();
-                               if (!child)
-                                       continue;
-                               child->getUsedBranches(result, true);
-                       }
+                       child->getUsedBranches(result, true);
                }
-               // next paragraph
-               it.pit()++;
-               it.pos() = 0;
        }
        // remove duplicates
        result.unique();
 }
 
 
-void Buffer::renameBranches(docstring const & oldname, docstring const & newname)
-{
-       // Iterate over buffer, starting with first paragraph
-       // The scope must be bigger than any lookup DocIterator
-       // later. For the global lookup, lastpit+1 is used, hence
-       // we use lastpit+2 here.
-       DocIterator it = par_iterator_begin();
-       DocIterator scope = it;
-       scope.pit() = scope.lastpit() + 2;
-       pit_type lastpit = it.lastpit();
-
-       while (it.pit() <= lastpit) {
-               Paragraph & par = it.paragraph();
-
-               // iterate over the insets of the current paragraph
-               InsetList const & insets = par.insetList();
-               InsetList::const_iterator iit = insets.begin();
-               InsetList::const_iterator end = insets.end();
-               for (; iit != end; ++iit) {
-                       it.pos() = iit->pos;
-
-                       if (iit->inset->lyxCode() == BRANCH_CODE) {
-                               // get buffer of external file
-                               InsetBranch & br =
-                                       static_cast<InsetBranch &>(*iit->inset);
-                               undo().recordUndo(it);
-                               if (br.branch() == oldname)
-                                       br.rename(newname);
-                               continue;
-                       }
-
-                       // is it an external file?
-                       if (iit->inset->lyxCode() == INCLUDE_CODE) {
-                               // get buffer of external file
-                               InsetInclude const & inset =
-                                       static_cast<InsetInclude const &>(*iit->inset);
-                               Buffer * child = inset.getChildBuffer();
-                               if (!child)
-                                       continue;
-                               child->renameBranches(oldname, newname);
-                       }
-               }
-               // next paragraph
-               it.pit()++;
-               it.pos() = 0;
-       }
-}
-
-
 void Buffer::updateMacroInstances() const
 {
        LYXERR(Debug::MACROS, "updateMacroInstances for "
@@ -3434,7 +3389,8 @@ static void setLabel(Buffer const & buf, ParIterator & it)
                        counters.reset(enumcounter);
                counters.step(enumcounter);
 
-               par.params().labelString(counters.theCounter(enumcounter));
+               string const & lang = par.getParLanguage(bp)->code();
+               par.params().labelString(counters.theCounter(enumcounter, lang));
 
                break;
        }
@@ -3447,10 +3403,11 @@ static void setLabel(Buffer const & buf, ParIterator & it)
                else {
                        docstring name = buf.B_(textclass.floats().getType(type).name());
                        if (counters.hasCounter(from_utf8(type))) {
+                               string const & lang = par.getParLanguage(bp)->code();
                                counters.step(from_utf8(type));
                                full_label = bformat(from_ascii("%1$s %2$s:"), 
                                                     name, 
-                                                    counters.theCounter(from_utf8(type)));
+                                                    counters.theCounter(from_utf8(type), lang));
                        } else
                                full_label = bformat(from_ascii("%1$s #:"), name);      
                }