]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Improve fullscreen capabilities ( http://bugzilla.lyx.org/show_bug.cgi?id=4146 ).
[lyx.git] / src / Buffer.cpp
index 7ccf355a8e58d931102c7f76daa81e02d048ebf6..5e00debe35e6b763ff033408f898024180e7c9e3 100644 (file)
@@ -79,7 +79,6 @@
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/ExceptionMessage.h"
-#include "support/FileFilterList.h"
 #include "support/FileName.h"
 #include "support/FileNameList.h"
 #include "support/filetools.h"
@@ -114,7 +113,7 @@ namespace os = support::os;
 
 namespace {
 
-int const LYX_FORMAT = 313; // Richard Heck: conversion of module representations
+int const LYX_FORMAT = 314; // Uwe Stöhr: scrlttr2 for serial letters
 
 } // namespace anon
 
@@ -1128,9 +1127,15 @@ void Buffer::writeLaTeXSource(odocstream & os,
        
        LYXERR(Debug::INFO, "preamble finished, now the body.");
 
+       // load children, if not already done. 
+       // This includes an updateMacro() call.
+       // Don't move this behind the parent_buffer=0 code below,
+       // because then the macros will not get the right "redefinition"
+       // flag as they don't see the parent macros which are output before.
+       loadChildDocuments();
+
        // fold macros if possible, still with parent buffer as the
        // macros will be put in the prefix anyway.
-       updateMacros();
        updateMacroInstances();
 
        // if we are doing a real file with body, even if this is the
@@ -1145,10 +1150,8 @@ void Buffer::writeLaTeXSource(odocstream & os,
                d->parent_buffer = 0;
        }
 
-       loadChildDocuments();
-
        // the real stuff
-       latexParagraphs(*this, paragraphs(), os, d->texrow, runparams);
+       latexParagraphs(*this, text(), os, d->texrow, runparams);
 
        // Restore the parenthood if needed
        if (output_preamble) {
@@ -1750,31 +1753,33 @@ MacroData const * Buffer::getBufferMacro(docstring const & name,
        // find macros in included files
        Impl::PositionScopeBufferMap::const_iterator it
        = greatest_below(d->position_to_children, pos);
-       if (it != d->position_to_children.end()) {
-               while (true) {
-                       // do we know something better (i.e. later) already?
-                       if (it->first < bestPos )               
-                               break;
+       if (it == d->position_to_children.end())
+               // no children before
+               return bestData;
 
-                       // scope ends behind pos?
-                       if (pos < it->second.first) {
-                               // look for macro in external file
-                               d->macro_lock = true;
-                               MacroData const * data
-                               = it->second.second->getMacro(name, false);
-                               d->macro_lock = false;
-                               if (data) {
-                                       bestPos = it->first;
-                                       bestData = data;                               
-                                       break;
-                               }
-                       }
-                       
-                       // try previous file if there is one
-                       if (it == d->position_to_children.begin())
+       while (true) {
+               // do we know something better (i.e. later) already?
+               if (it->first < bestPos )
+                       break;
+
+               // scope ends behind pos?
+               if (pos < it->second.first) {
+                       // look for macro in external file
+                       d->macro_lock = true;
+                       MacroData const * data
+                       = it->second.second->getMacro(name, false);
+                       d->macro_lock = false;
+                       if (data) {
+                               bestPos = it->first;
+                               bestData = data;
                                break;
-                       --it;
+                       }
                }
+
+               // try previous file if there is one
+               if (it == d->position_to_children.begin())
+                       break;
+               --it;
        }
                
        // return the best macro we have found
@@ -1895,7 +1900,7 @@ void Buffer::updateEnvironmentMacros(DocIterator & it,
                                if (!child)
                                        continue;                               
 
-                               // register it, but only when it is
+                               // register its position, but only when it is
                                // included first in the buffer
                                if (d->children_positions.find(child)
                                    == d->children_positions.end())
@@ -2076,7 +2081,7 @@ void Buffer::writeParentMacros(odocstream & os) const
                MacroData const * data = 
                d->parent_buffer->getMacro(*it, *this, false);
                if (data)
-                       data->write(os, true);          
+                       data->write(os, true);  
        }
 }
 
@@ -2156,7 +2161,7 @@ void Buffer::getSourceCode(odocstream & os, pit_type par_begin,
                d->texrow.newline();
                // output paragraphs
                if (isLatex()) {
-                       latexParagraphs(*this, paragraphs(), os, d->texrow, runparams);
+                       latexParagraphs(*this, text(), os, d->texrow, runparams);
                } else {
                        // DocBook
                        docbookParagraphs(paragraphs(), *this, os, runparams);
@@ -2260,14 +2265,12 @@ private:
 };
 
 
-#if !defined (HAVE_FORK)
-# define fork() -1
-#endif
-
 int AutoSaveBuffer::generateChild()
 {
        // tmp_ret will be located (usually) in /tmp
        // will that be a problem?
+       // Note that this calls ForkedCalls::fork(), so it's
+       // ok cross-platform.
        pid_t const pid = fork();
        // If you want to debug the autosave
        // you should set pid to -1, and comment out the fork.
@@ -2467,40 +2470,40 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
        if (!success)
                return false;
 
-       if (put_in_tempdir)
+       if (put_in_tempdir) {
                result_file = tmp_result_file.absFilename();
-       else {
-               result_file = changeExtension(absFileName(), ext);
-               // We need to copy referenced files (e. g. included graphics
-               // if format == "dvi") to the result dir.
-               vector<ExportedFile> const files =
-                       runparams.exportdata->externalFiles(format);
-               string const dest = onlyPath(result_file);
-               CopyStatus status = SUCCESS;
-               for (vector<ExportedFile>::const_iterator it = files.begin();
-                               it != files.end() && status != CANCEL; ++it) {
-                       string const fmt =
-                               formats.getFormatFromFile(it->sourceName);
-                       status = copyFile(fmt, it->sourceName,
-                                         makeAbsPath(it->exportName, dest),
-                                         it->exportName, status == FORCE);
-               }
-               if (status == CANCEL) {
-                       message(_("Document export cancelled."));
-               } else if (tmp_result_file.exists()) {
-                       // Finally copy the main file
-                       status = copyFile(format, tmp_result_file,
-                                         FileName(result_file), result_file,
-                                         status == FORCE);
-                       message(bformat(_("Document exported as %1$s "
-                                                              "to file `%2$s'"),
-                                               formats.prettyName(format),
-                                               makeDisplayPath(result_file)));
-               } else {
-                       // This must be a dummy converter like fax (bug 1888)
-                       message(bformat(_("Document exported as %1$s"),
-                                               formats.prettyName(format)));
-               }
+               return true;
+       }
+
+       result_file = changeExtension(absFileName(), ext);
+       // We need to copy referenced files (e. g. included graphics
+       // if format == "dvi") to the result dir.
+       vector<ExportedFile> const files =
+               runparams.exportdata->externalFiles(format);
+       string const dest = onlyPath(result_file);
+       CopyStatus status = SUCCESS;
+       for (vector<ExportedFile>::const_iterator it = files.begin();
+               it != files.end() && status != CANCEL; ++it) {
+               string const fmt = formats.getFormatFromFile(it->sourceName);
+               status = copyFile(fmt, it->sourceName,
+                       makeAbsPath(it->exportName, dest),
+                       it->exportName, status == FORCE);
+       }
+       if (status == CANCEL) {
+               message(_("Document export cancelled."));
+       } else if (tmp_result_file.exists()) {
+               // Finally copy the main file
+               status = copyFile(format, tmp_result_file,
+                       FileName(result_file), result_file,
+                       status == FORCE);
+               message(bformat(_("Document exported as %1$s "
+                       "to file `%2$s'"),
+                       formats.prettyName(format),
+                       makeDisplayPath(result_file)));
+       } else {
+               // This must be a dummy converter like fax (bug 1888)
+               message(bformat(_("Document exported as %1$s"),
+                       formats.prettyName(format)));
        }
 
        return true;