*/
bool file_fully_loaded;
+ /// Ignore the parent (e.g. when exporting a child standalone)?
+ bool ignore_parent;
+
///
mutable TocBackend toc_backend;
/// This is here to force the test to be done whenever parent_buffer
/// is accessed.
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.
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), preview_loader_(0),
cloned_buffer_(cloned_buffer), clone_list_(0),
doing_export(false), parent_buffer(0)
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);
runparams.use_japanese = features.isRequired("japanese");
- if (!output_body)
+ if (!output_body) {
+ // Restore the parenthood if needed
+ if (!runparams.is_child)
+ d->ignore_parent = false;
return;
+ }
// make the body.
os << "\\begin{document}\n";
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;
void Buffer::validate(LaTeXFeatures & features) const
{
- params().validate(features);
+ // Validate the buffer params, but not for included
+ // files, since they also use the parent buffer's
+ // params (# 5941)
+ if (!features.runparams().is_child)
+ params().validate(features);
for_each(paragraphs().begin(), paragraphs().end(),
bind(&Paragraph::validate, _1, ref(features)));
void Buffer::getSourceCode(odocstream & os, string const format,
pit_type par_begin, pit_type par_end,
- OutputWhat output) const
+ OutputWhat output, bool master) const
{
OutputParams runparams(¶ms().encoding());
runparams.nice = true;
} 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).
+ if (!master)
+ 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)
texrow.newline();
// latex or literate
otexstream ots(os, texrow);
+
+ // the real stuff
latexParagraphs(*this, text(), ots, runparams);
+
+ // Restore the parenthood
+ if (!master)
+ d->ignore_parent = false;
}
} else {
os << "% ";
d->texrow.newline();
d->texrow.newline();
otexstream ots(os, d->texrow);
+ if (master)
+ runparams.is_child = true;
writeLaTeXSource(ots, string(), runparams, output);
}
}