]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Move OS specific code to proper place. Also make sure that no other
[lyx.git] / src / Buffer.cpp
index b72af58f79f8ee1e432f46efb257ae5ee1670114..c97a6cddf4d0969f30a58f21874c17e1555d4cb4 100644 (file)
@@ -49,7 +49,6 @@
 #include "output_latex.h"
 #include "output_xhtml.h"
 #include "output_plaintext.h"
-#include "paragraph_funcs.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
@@ -127,7 +126,7 @@ namespace {
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-int const LYX_FORMAT = 363;  // uwestoehr: support for longtable alignment
+int const LYX_FORMAT = 369; // vfr: add author ids to list of authors
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
@@ -440,12 +439,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);
@@ -673,7 +689,7 @@ bool Buffer::readDocument(Lexer & lex)
        }
 
        // read main text
-       bool const res = text().read(*this, lex, errorList, d->inset);
+       bool const res = text().read(lex, errorList, d->inset);
 
        updateMacros();
        updateMacroInstances();
@@ -681,57 +697,6 @@ bool Buffer::readDocument(Lexer & lex)
 }
 
 
-// needed to insert the selection
-void Buffer::insertStringAsLines(ParagraphList & pars,
-       pit_type & pit, pos_type & pos,
-       Font const & fn, docstring const & str, bool autobreakrows)
-{
-       Font font = fn;
-
-       // insert the string, don't insert doublespace
-       bool space_inserted = true;
-       for (docstring::const_iterator cit = str.begin();
-           cit != str.end(); ++cit) {
-               Paragraph & par = pars[pit];
-               if (*cit == '\n') {
-                       if (autobreakrows && (!par.empty() || par.allowEmpty())) {
-                               breakParagraph(params(), pars, pit, pos,
-                                              par.layout().isEnvironment());
-                               ++pit;
-                               pos = 0;
-                               space_inserted = true;
-                       } else {
-                               continue;
-                       }
-                       // do not insert consecutive spaces if !free_spacing
-               } else if ((*cit == ' ' || *cit == '\t') &&
-                          space_inserted && !par.isFreeSpacing()) {
-                       continue;
-               } else if (*cit == '\t') {
-                       if (!par.isFreeSpacing()) {
-                               // tabs are like spaces here
-                               par.insertChar(pos, ' ', font, params().trackChanges);
-                               ++pos;
-                               space_inserted = true;
-                       } else {
-                               par.insertChar(pos, *cit, font, params().trackChanges);
-                               ++pos;
-                               space_inserted = true;
-                       }
-               } else if (!isPrintable(*cit)) {
-                       // Ignore unprintables
-                       continue;
-               } else {
-                       // just insert the character
-                       par.insertChar(pos, *cit, font, params().trackChanges);
-                       ++pos;
-                       space_inserted = (*cit == ' ');
-               }
-
-       }
-}
-
-
 bool Buffer::readString(string const & s)
 {
        params().compressed = false;
@@ -997,7 +962,7 @@ bool Buffer::write(ostream & ofs) const
        AuthorList::Authors::const_iterator a_it = params().authors().begin();
        AuthorList::Authors::const_iterator a_end = params().authors().end();
        for (; a_it != a_end; ++a_it)
-               a_it->second.setUsed(false);
+               a_it->setUsed(false);
 
        ParIterator const end = const_cast<Buffer *>(this)->par_iterator_end();
        ParIterator it = const_cast<Buffer *>(this)->par_iterator_begin();
@@ -1011,7 +976,7 @@ bool Buffer::write(ostream & ofs) const
 
        // write the text
        ofs << "\n\\begin_body\n";
-       text().write(*this, ofs);
+       text().write(ofs);
        ofs << "\n\\end_body\n";
 
        // Write marker that shows file is complete
@@ -1351,7 +1316,7 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
 
        sgml::openTag(os, top);
        os << '\n';
-       docbookParagraphs(paragraphs(), *this, os, runparams);
+       docbookParagraphs(text(), *this, os, runparams);
        sgml::closeTag(os, top_element);
 }
 
@@ -1409,7 +1374,7 @@ void Buffer::writeLyXHTMLSource(odocstream & os,
        }
 
        params().documentClass().counters().reset();
-       xhtmlParagraphs(paragraphs(), *this, os, runparams);
+       xhtmlParagraphs(text(), *this, os, runparams);
        if (!only_body)
                os << "</body>\n</html>\n";
 }
@@ -1615,9 +1580,9 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
 
                case LFUN_BRANCH_ACTIVATE: 
                case LFUN_BRANCH_DEACTIVATE: {
-               BranchList const & branchList = params().branchlist();
-               docstring const branchName = cmd.argument();
-               flag.setEnabled(!branchName.empty()
+                       BranchList const & branchList = params().branchlist();
+                       docstring const branchName = cmd.argument();
+                       flag.setEnabled(!branchName.empty()
                                && branchList.find(branchName));
                        break;
                }
@@ -2615,7 +2580,7 @@ void Buffer::getSourceCode(odocstream & os, pit_type par_begin,
                texrow.newline();
                // output paragraphs
                if (isDocBook())
-                       docbookParagraphs(paragraphs(), *this, os, runparams);
+                       docbookParagraphs(text(), *this, os, runparams);
                else 
                        // latex or literate
                        latexParagraphs(*this, text(), os, texrow, runparams);
@@ -2958,7 +2923,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 =
@@ -3075,11 +3040,32 @@ bool Buffer::readFileHelper(FileName const & s)
                                      _("&Recover"),  _("&Load Original"),
                                      _("&Cancel")))
                {
-               case 0:
+               case 0: {
                        // the file is not saved if we load the emergency file.
                        markDirty();
-                       return readFile(e);
+                       docstring str;
+                       bool res;
+
+                       if ((res = readFile(e)) == success)
+                               str = _("Document was successfully recovered.");
+                       else
+                               str = _("Document was NOT successfully recovered.");
+                       str += "\n\n" + _("Remove emergency file now?");
+
+                       if (!Alert::prompt(_("Delete emergency file?"), str, 1, 1,
+                                       _("&Remove"), _("&Keep it"))) {
+                               e.removeFile();
+                               if (res == success)
+                                       Alert::warning(_("Emergency file deleted"),
+                                               _("Do not forget to save your file now!"), true);
+                               }
+                       return res;
+               }
                case 1:
+                       if (!Alert::prompt(_("Delete emergency file?"),
+                                       _("Remove emergency file now?"), 1, 1,
+                                       _("&Remove"), _("&Keep it")))
+                               e.removeFile();
                        break;
                default:
                        return false;
@@ -3332,7 +3318,7 @@ static void setLabel(Buffer const & buf, ParIterator & it)
        case LABEL_COUNTER:
                if (layout.toclevel <= bp.secnumdepth
                    && (layout.latextype != LATEX_ENVIRONMENT
-                       || isFirstInSequence(it.pit(), it.plist()))) {
+                       || it.text()->isFirstInSequence(it.pit()))) {
                        counters.step(layout.counter);
                        par.params().labelString(
                                par.expandLabel(layout, bp));