}
case LFUN_BRANCH_ADD:
+ case LFUN_BRANCHES_RENAME:
case LFUN_BUFFER_PRINT:
// if no Buffer is present, then of course we won't be called!
flag.setEnabled(true);
break;
}
+ case LFUN_BRANCHES_RENAME: {
+ docstring const oldname = from_utf8(func.getArg(0));
+ docstring const newname = from_utf8(func.getArg(1));
+ renameBranches(oldname, newname);
+ break;
+ }
+
case LFUN_BUFFER_PRINT: {
// we'll assume there's a problem until we succeed
dr.setError(true);
}
+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);
+ 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 "