]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
TextLayoutUi.ui: group everything into boxes for a consistent layout with the other...
[lyx.git] / src / Buffer.cpp
index 627159826a4a5ea0b9b2b3e0f1292fd1d05b6311..979b37ed5f27d220bfce3cec9f8954e5a8a4fc5c 100644 (file)
@@ -69,6 +69,7 @@
 
 #include "insets/InsetBibitem.h"
 #include "insets/InsetBibtex.h"
+#include "insets/InsetBranch.h"
 #include "insets/InsetInclude.h"
 #include "insets/InsetText.h"
 
@@ -126,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 = 364;  // spitz: branch suffixes for filenames
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
@@ -439,12 +440,29 @@ Undo & Buffer::undo()
 
 string Buffer::latexName(bool const no_path) const
 {
-       FileName latex_name = makeLatexName(d->filename);
+       FileName latex_name =
+               makeLatexName(exportFileName());
        return no_path ? latex_name.onlyFileName()
                : latex_name.absFilename();
 }
 
 
+FileName Buffer::exportFileName() const
+{
+       docstring const branch_suffix =
+               params().branchlist().getFilenameSuffix();
+       if (branch_suffix.empty())
+               return fileName();
+
+       string const name = fileName().onlyFileNameWithoutExt()
+               + to_utf8(branch_suffix);
+       FileName res(fileName().onlyPath().absFilename() + "/" + name);
+       res.changeExtension(fileName().extension());
+
+       return res;
+}
+
+
 string Buffer::logName(LogType * type) const
 {
        string const filename = latexName(false);
@@ -486,8 +504,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;
@@ -1621,6 +1639,8 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                        break;
                }
 
+               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);
@@ -1657,6 +1677,28 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
                break;
        }
 
+       case LFUN_BRANCH_ADD: {
+               BranchList & branchList = params().branchlist();
+               docstring const branchName = func.argument();
+               if (branchName.empty()) {
+                       dispatched = false;
+                       break;
+               }
+               Branch * branch = branchList.find(branchName);
+               if (branch) {
+                       LYXERR0("Branch " << branchName << " does already exist.");
+                       dr.setError(true);
+                       docstring const msg = 
+                               bformat(_("Branch \"%1$s\" does already exist."), branchName);
+                       dr.setMessage(msg);
+               } else {
+                       branchList.add(branchName);
+                       dr.setError(false);
+                       dr.update(Update::Force);
+               }
+               break;
+       }
+
        case LFUN_BRANCH_ACTIVATE:
        case LFUN_BRANCH_DEACTIVATE: {
                BranchList & branchList = params().branchlist();
@@ -1681,6 +1723,41 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
                break;
        }
 
+       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));
+               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;
+       }
+
        case LFUN_BUFFER_PRINT: {
                // we'll assume there's a problem until we succeed
                dr.setError(true); 
@@ -2328,6 +2405,35 @@ void Buffer::updateMacros() const
 }
 
 
+void Buffer::getUsedBranches(std::list<docstring> & result, bool const from_master) const
+{
+       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;
+                       child->getUsedBranches(result, true);
+               }
+       }
+       // remove duplicates
+       result.unique();
+}
+
+
 void Buffer::updateMacroInstances() const
 {
        LYXERR(Debug::MACROS, "updateMacroInstances for "
@@ -2869,7 +2975,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
                return true;
        }
 
-       result_file = changeExtension(absFileName(), ext);
+       result_file = changeExtension(exportFileName().absFilename(), ext);
        // We need to copy referenced files (e. g. included graphics
        // if format == "dvi") to the result dir.
        vector<ExportedFile> const files =
@@ -3106,7 +3212,7 @@ void Buffer::updateLabels(UpdateScope scope) const
                        // 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_)
-                               structureChanged();     
+                               structureChanged();
 
                        // was buf referenced from the master (i.e. not in bufToUpdate anymore)?
                        if (bufToUpdate.find(this) == bufToUpdate.end())
@@ -3234,7 +3340,7 @@ static void setLabel(Buffer const & buf, ParIterator & it)
        if (layout.margintype == MARGIN_MANUAL
            || layout.latextype == LATEX_BIB_ENVIRONMENT) {
                if (par.params().labelWidthString().empty())
-                       par.params().labelWidthString(par.translateIfPossible(layout.labelstring(), bp));
+                       par.params().labelWidthString(par.expandLabel(layout, bp));
        } else {
                par.params().labelWidthString(docstring());
        }
@@ -3300,7 +3406,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;
        }
@@ -3313,10 +3420,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);      
                }
@@ -3333,8 +3441,7 @@ static void setLabel(Buffer const & buf, ParIterator & it)
        case LABEL_CENTERED_TOP_ENVIRONMENT:
        case LABEL_STATIC:      
        case LABEL_BIBLIO:
-               par.params().labelString(
-                       par.translateIfPossible(layout.labelstring(), bp));
+               par.params().labelString(par.expandLabel(layout, bp));
                break;
        }
 }
@@ -3385,8 +3492,10 @@ int Buffer::spellCheck(DocIterator & from, DocIterator & to,
                while (from.inMathed())
                        from.forwardInset();
                to = from;
-               if (from.paragraph().spellCheck(from.pos(), to.pos(), wl, suggestions))
+               if (from.paragraph().spellCheck(from.pos(), to.pos(), wl, suggestions)) {
+                       word_lang = wl;
                        break;
+               }
                from = to;
                ++progress;
        }