]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Tooltips for collapsables and branches
[lyx.git] / src / Buffer.cpp
index 0fff4f4157e236813ffae6d79f863fb3cfe3ad0c..7858c42ce8f15c324cfd2b2d48a03997ca866bd4 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) {
@@ -1482,60 +1485,37 @@ bool Buffer::isMultiLingual() const
 }
 
 
-ParConstIterator Buffer::getParFromID(int const id) const
-{
-       ParConstIterator it = par_iterator_begin();
-       ParConstIterator const end = par_iterator_end();
-
-       if (id < 0) {
-               // John says this is called with id == -1 from undo
-               lyxerr << "getParFromID(), id: " << id << endl;
-               return end;
-       }
-
-       for (; it != end; ++it)
-               if (it->id() == id)
-                       return it;
-
-       return end;
-}
-
-
-ParIterator Buffer::getParFromID(int const id)
+DocIterator Buffer::getParFromID(int const id) const
 {
-       ParIterator it = par_iterator_begin();
-       ParIterator const end = par_iterator_end();
-
        if (id < 0) {
                // John says this is called with id == -1 from undo
                lyxerr << "getParFromID(), id: " << id << endl;
-               return end;
+               return doc_iterator_end(inset());
        }
 
-       for (; it != end; ++it)
-               if (it->id() == id)
+       for (DocIterator it = doc_iterator_begin(inset()); !it.atEnd(); it.forwardPar())
+               if (it.paragraph().id() == id)
                        return it;
 
-       return end;
+       return doc_iterator_end(inset());
 }
 
 
 bool Buffer::hasParWithID(int const id) const
 {
-       ParConstIterator const it = getParFromID(id);
-       return it != par_iterator_end();
+       return !getParFromID(id).atEnd();
 }
 
 
 ParIterator Buffer::par_iterator_begin()
 {
-       return lyx::par_iterator_begin(inset());
+       return ParIterator(doc_iterator_begin(inset()));
 }
 
 
 ParIterator Buffer::par_iterator_end()
 {
-       return lyx::par_iterator_end(inset());
+       return ParIterator(doc_iterator_end(inset()));
 }
 
 
@@ -1750,31 +1730,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 +1877,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())
@@ -2005,8 +1987,8 @@ void Buffer::updateMacroInstances() const
 {
        LYXERR(Debug::MACROS, "updateMacroInstances for "
                << d->filename.onlyFileName());
-       ParConstIterator it = par_iterator_begin();
-       ParConstIterator end = par_iterator_end();
+       DocIterator it = doc_iterator_begin(inset());
+       DocIterator end = doc_iterator_end(inset());
        for (; it != end; it.forwardPos()) {
                // look for MathData cells in InsetMathNest insets
                Inset * inset = it.nextInset();
@@ -2156,7 +2138,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 +2242,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.