mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
(cherry picked from commit 02c73cd721
)
This commit is contained in:
parent
9d43101254
commit
2f3acae922
@ -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;
|
||||
|
||||
@ -277,6 +280,10 @@ public:
|
||||
/// 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.
|
||||
@ -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 << "% ";
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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),
|
||||
|
@ -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.
|
||||
|
@ -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) {
|
||||
|
@ -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).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user