The branch, 2.0.x, has been updated.

- Log -----------------------------------------------------------------

commit 2f3acae92285869d3700ce144420bebb54a1d7b5
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Wed Oct 3 10:41:07 2012 +0200

    Do not let the parent interfere when I child document is exported/view 
standalone (#8100, #8101)
    (cherry picked from commit 02c73cd7213a22d290dd18c127bf2350fd5a8dae)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 0af6091..bb5943a 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -210,6 +210,9 @@ public:
         */
        bool file_fully_loaded;
 
+       /// Ignore the parent (e.g. when exporting a child standalone)?
+       bool ignore_parent;
+
        ///
        mutable TocBackend toc_backend;
 
@@ -276,7 +279,11 @@ public:
 
        /// This is here to force the test to be done whenever parent_buffer
        /// is accessed.
-       Buffer const * parent() const { 
+       Buffer const * parent() const {
+               // ignore_parent temporarily "orphans" a buffer
+               // (e.g. if a child is compiled standalone)
+               if (ignore_parent)
+                       return 0;
                // if parent_buffer is not loaded, then it has been unloaded,
                // which means that parent_buffer is an invalid pointer. So we
                // set it to null in that case.
@@ -356,9 +363,9 @@ Buffer::Impl::Impl(Buffer * owner, FileName const & file, 
bool readonly_,
        Buffer const * cloned_buffer)
        : owner_(owner), lyx_clean(true), bak_clean(true), unnamed(false),
          internal_buffer(false), read_only(readonly_), filename(file),
-         file_fully_loaded(false), toc_backend(owner), macro_lock(false),
-         timestamp_(0), checksum_(0), wa_(0), gui_(0), undo_(*owner),
-         bibinfo_cache_valid_(false), bibfile_cache_valid_(false), 
+         file_fully_loaded(false), ignore_parent(false), toc_backend(owner),
+         macro_lock(false), timestamp_(0), checksum_(0), wa_(0), gui_(0),
+         undo_(*owner), bibinfo_cache_valid_(false), 
bibfile_cache_valid_(false),
          cite_labels_valid_(false), cloned_buffer_(cloned_buffer),
          clone_list_(0), doing_export(false), parent_buffer(0)
 {
@@ -1419,12 +1426,19 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
 void Buffer::writeLaTeXSource(otexstream & os,
                           string const & original_path,
                           OutputParams const & runparams_in,
-         OutputWhat output) const
+                          OutputWhat output) const
 {
        // The child documents, if any, shall be already loaded at this point.
 
        OutputParams runparams = runparams_in;
 
+       // If we are compiling a file standalone, even if this is the
+       // child of some other buffer, let's cut the link here, so the
+       // file is really independent and no concurring settings from
+       // the master (e.g. branch state) interfere (see #8100).
+       if (!runparams.is_child)
+               d->ignore_parent = true;
+
        // Classify the unicode characters appearing in math insets
        Encodings::initUnicodeMath(*this);
 
@@ -1566,21 +1580,12 @@ void Buffer::writeLaTeXSource(otexstream & os,
 
        LYXERR(Debug::INFO, "preamble finished, now the body.");
 
-       // if we are doing a real file with body, even if this is the
-       // child of some other buffer, let's cut the link here.
-       // This happens for example if only a child document is printed.
-       Buffer const * save_parent = 0;
-       if (output_preamble) {
-               save_parent = d->parent();
-               d->setParent(0);
-       }
-
        // the real stuff
        latexParagraphs(*this, text(), os, runparams);
 
        // Restore the parenthood if needed
-       if (output_preamble)
-               d->setParent(save_parent);
+       if (!runparams.is_child)
+               d->ignore_parent = false;
 
        // add this just in case after all the paragraphs
        os << endl;
@@ -3235,6 +3240,12 @@ void Buffer::getSourceCode(odocstream & os, string const 
format,
                } else if (params().isDocBook()) {
                        docbookParagraphs(text(), *this, os, runparams);
                } else {
+                       // If we are previewing a paragraph, even if this is the
+                       // child of some other buffer, let's cut the link here,
+                       // so that no concurring settings from the master
+                       // (e.g. branch state) interfere (see #8101).
+                       // FIXME: Add an optional "from master" perspective.
+                       d->ignore_parent = true;
                        // We need to validate the Buffer params' features here
                        // in order to know if we should output polyglossia
                        // macros (instead of babel macros)
@@ -3247,7 +3258,12 @@ void Buffer::getSourceCode(odocstream & os, string const 
format,
                        texrow.newline();
                        // latex or literate
                        otexstream ots(os, texrow);
+
+                       // the real stuff
                        latexParagraphs(*this, text(), ots, runparams);
+
+                       // Restore the parenthood
+                       d->ignore_parent = false;
                }
        } else {
                os << "% ";
diff --git a/src/BufferList.cpp b/src/BufferList.cpp
index b8a30e8..faa1958 100644
--- a/src/BufferList.cpp
+++ b/src/BufferList.cpp
@@ -221,8 +221,10 @@ Buffer * BufferList::previous(Buffer const * buf) const
 
 
 void BufferList::updateIncludedTeXfiles(string const & masterTmpDir,
-                                       OutputParams const & runparams)
+                                       OutputParams const & runparams_in)
 {
+       OutputParams runparams = runparams_in;
+       runparams.is_child = true;
        BufferStorage::iterator it = bstore.begin();
        BufferStorage::iterator end = bstore.end();
        for (; it != end; ++it) {
@@ -233,6 +235,7 @@ void BufferList::updateIncludedTeXfiles(string const & 
masterTmpDir,
                        (*it)->markDepClean(masterTmpDir);
                }
        }
+       runparams.is_child = false;
 }
 
 
diff --git a/src/OutputParams.cpp b/src/OutputParams.cpp
index a0e7a1c..ef80fb0 100644
--- a/src/OutputParams.cpp
+++ b/src/OutputParams.cpp
@@ -19,9 +19,9 @@ namespace lyx {
 
 
 OutputParams::OutputParams(Encoding const * enc)
-       : flavor(LATEX), math_flavor(NotApplicable), nice(false), 
moving_arg(false), 
-         inulemcmd(false), local_font(0), master_language(0), encoding(enc),
-         free_spacing(false), use_babel(false), use_polyglossia(false),
+       : flavor(LATEX), math_flavor(NotApplicable), nice(false), 
is_child(false),
+         moving_arg(false), inulemcmd(false), local_font(0), 
master_language(0),
+         encoding(enc), free_spacing(false), use_babel(false), 
use_polyglossia(false),
          use_indices(false), use_japanese(false), linelen(0), depth(0),
          exportdata(new ExportData),
          inComment(false), inTableCell(NO), inFloat(NONFLOAT),
diff --git a/src/OutputParams.h b/src/OutputParams.h
index 97f4661..dbad69a 100644
--- a/src/OutputParams.h
+++ b/src/OutputParams.h
@@ -81,6 +81,12 @@ public:
        */
        bool nice;
 
+       /** Is this a real child (i.e., compiled as a child)?
+           This depends on wherefrom we export the buffer. Even children
+           that have a master can be compiled standalone.
+       */
+       mutable bool is_child;
+
        /** moving_arg == true means that the environment in which the inset
            is typeset is a moving argument. The inset should take care about
            fragile commands by preceding the latex with \\protect.
diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp
index 2940124..d161fad 100644
--- a/src/insets/InsetInclude.cpp
+++ b/src/insets/InsetInclude.cpp
@@ -618,6 +618,7 @@ void InsetInclude::latex(otexstream & os, OutputParams 
const & runparams) const
                runparams.master_language = buffer().params().language;
                runparams.par_begin = 0;
                runparams.par_end = tmp->paragraphs().size();
+               runparams.is_child = true;
                if (!tmp->makeLaTeXFile(tmpwritefile, masterFileName(buffer()).
                                onlyPath().absFileName(), runparams, 
Buffer::OnlyBody)) {
                        docstring msg = bformat(_("Included file `%1$s' "
@@ -633,6 +634,7 @@ void InsetInclude::latex(otexstream & os, OutputParams 
const & runparams) const
                }
                runparams.encoding = oldEnc;
                runparams.master_language = oldLang;
+               runparams.is_child = false;
 
                // If needed, use converters to produce a latex file from the 
child
                if (tmpwritefile != writefile) {
diff --git a/status.20x b/status.20x
index ea20631..8467706 100644
--- a/status.20x
+++ b/status.20x
@@ -88,11 +88,16 @@ What's new
 
 - Do not output empty language switch commands (bug 8216).
 
+- Do not let the master document interfere when a child is compiled standalone
+  (bug 8000).
+
 - When using Turkish language, use the xkeyval package to avoid
   incompatibilities (bug 2005).
 
 - Do not ignore polyglossia commands in partial source preview (bug 8209).
 
+- Show enabled child-only branches content in source preview (bug 8001).
+
 - Export correct language change commands if document contains different
   CJK languages (bug 8215).
 

-----------------------------------------------------------------------

Summary of changes:
 src/Buffer.cpp              |   48 ++++++++++++++++++++++++++++--------------
 src/BufferList.cpp          |    5 +++-
 src/OutputParams.cpp        |    6 ++--
 src/OutputParams.h          |    6 +++++
 src/insets/InsetInclude.cpp |    2 +
 status.20x                  |    5 ++++
 6 files changed, 52 insertions(+), 20 deletions(-)


hooks/post-receive
-- 
The LyX Source Repository

Reply via email to