From f25e7c340b7b82af161f9cf6adbb537ea260fc28 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Sat, 29 Oct 2011 20:14:48 +0000 Subject: [PATCH] Improve argument handling for the source generation routines. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40069 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Buffer.cpp | 44 ++++++++++++++++++++++------------ src/Buffer.h | 18 ++++++++------ src/BufferList.cpp | 2 +- src/graphics/PreviewLoader.cpp | 2 +- src/insets/InsetInclude.cpp | 6 ++--- 5 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 794ae11b61..0ffac77a6d 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1301,7 +1301,7 @@ bool Buffer::write(ostream & ofs) const bool Buffer::makeLaTeXFile(FileName const & fname, string const & original_path, OutputParams const & runparams_in, - bool output_preamble, bool output_body) const + OutputWhat output) const { OutputParams runparams = runparams_in; @@ -1340,8 +1340,7 @@ bool Buffer::makeLaTeXFile(FileName const & fname, try { os.texrow().reset(); - writeLaTeXSource(os, original_path, - runparams, output_preamble, output_body); + writeLaTeXSource(os, original_path, runparams, output); } catch (EncodingException & e) { odocstringstream ods; @@ -1386,7 +1385,7 @@ bool Buffer::makeLaTeXFile(FileName const & fname, void Buffer::writeLaTeXSource(otexstream & os, string const & original_path, OutputParams const & runparams_in, - bool const output_preamble, bool const output_body) const + OutputWhat output) const { // The child documents, if any, shall be already loaded at this point. @@ -1401,6 +1400,11 @@ void Buffer::writeLaTeXSource(otexstream & os, validate(features); LYXERR(Debug::LATEX, " Buffer validation done."); + bool const output_preamble = + output == FullSource || output == OnlyPreamble; + bool const output_body = + output == FullSource || output == OnlyBody; + // The starting paragraph of the coming rows is the // first paragraph of the document. (Asger) if (output_preamble && runparams.nice) { @@ -1562,7 +1566,7 @@ void Buffer::writeLaTeXSource(otexstream & os, void Buffer::makeDocBookFile(FileName const & fname, OutputParams const & runparams, - bool const body_only) const + OutputWhat output) const { LYXERR(Debug::LATEX, "makeDocBookFile..."); @@ -1575,7 +1579,7 @@ void Buffer::makeDocBookFile(FileName const & fname, updateBuffer(); updateMacroInstances(OutputUpdate); - writeDocBookSource(ofs, fname.absFileName(), runparams, body_only); + writeDocBookSource(ofs, fname.absFileName(), runparams, output); ofs.close(); if (ofs.fail()) @@ -1585,7 +1589,7 @@ void Buffer::makeDocBookFile(FileName const & fname, void Buffer::writeDocBookSource(odocstream & os, string const & fname, OutputParams const & runparams, - bool const only_body) const + OutputWhat output) const { LaTeXFeatures features(*this, params(), runparams); validate(features); @@ -1595,7 +1599,12 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname, DocumentClass const & tclass = params().documentClass(); string const top_element = tclass.latexname(); - if (!only_body) { + bool const output_preamble = + output == FullSource || output == OnlyPreamble; + bool const output_body = + output == FullSource || output == OnlyBody; + + if (output_preamble) { if (runparams.flavor == OutputParams::XML) os << "\n"; @@ -1670,7 +1679,7 @@ void Buffer::makeLyXHTMLFile(FileName const & fname, updateBuffer(UpdateMaster, OutputUpdate); updateMacroInstances(OutputUpdate); - writeLyXHTMLSource(ofs, runparams); + writeLyXHTMLSource(ofs, runparams, FullSource); ofs.close(); if (ofs.fail()) @@ -1680,13 +1689,18 @@ void Buffer::makeLyXHTMLFile(FileName const & fname, void Buffer::writeLyXHTMLSource(odocstream & os, OutputParams const & runparams, - bool const only_body) const + OutputWhat output) const { LaTeXFeatures features(*this, params(), runparams); validate(features); d->bibinfo_.makeCitationLabels(*this); - if (!only_body) { + bool const output_preamble = + output == FullSource || output == OnlyPreamble; + bool const output_body = + output == FullSource || output == OnlyBody; + + if (output_preamble) { os << "\n" << "\n" // FIXME Language should be set properly. @@ -1734,7 +1748,7 @@ void Buffer::writeLyXHTMLSource(odocstream & os, XHTMLStream xs(os); params().documentClass().counters().reset(); xhtmlParagraphs(text(), *this, xs, runparams); - if (!only_body) + if (output_preamble) os << "\n\n"; } @@ -3180,13 +3194,13 @@ void Buffer::getSourceCode(odocstream & os, string const format, d->texrow.newline(); d->texrow.newline(); if (params().isDocBook()) - writeDocBookSource(os, absFileName(), runparams, false); + writeDocBookSource(os, absFileName(), runparams, FullSource); else if (runparams.flavor == OutputParams::HTML) - writeLyXHTMLSource(os, runparams, false); + writeLyXHTMLSource(os, runparams, FullSource); else { // latex or literate otexstream ots(os, d->texrow); - writeLaTeXSource(ots, string(), runparams, true, true); + writeLaTeXSource(ots, string(), runparams, FullSource); } } else { runparams.par_begin = par_begin; diff --git a/src/Buffer.h b/src/Buffer.h index f7cc714c6d..3a042989cb 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -285,12 +285,17 @@ public: /// Fill in the ErrorList with the TeXErrors void bufferErrors(TeXErrors const &, ErrorList &) const; + enum OutputWhat { + FullSource, + OnlyBody, + OnlyPreamble + }; + /// Just a wrapper for writeLaTeXSource, first creating the ofstream. bool makeLaTeXFile(support::FileName const & filename, std::string const & original_path, OutputParams const &, - bool output_preamble = true, - bool output_body = true) const; + OutputWhat output = FullSource) const; /** Export the buffer to LaTeX. If \p os is a file stream, and params().inputenc is "auto" or "default", and the buffer contains text in different languages @@ -316,23 +321,22 @@ public: void writeLaTeXSource(otexstream & os, std::string const & original_path, OutputParams const &, - bool output_preamble = true, - bool output_body = true) const; + OutputWhat output = FullSource) const; /// void makeDocBookFile(support::FileName const & filename, OutputParams const & runparams_in, - bool only_body = false) const; + OutputWhat output = FullSource) const; /// void writeDocBookSource(odocstream & os, std::string const & filename, OutputParams const & runparams_in, - bool only_body = false) const; + OutputWhat output = FullSource) const; /// void makeLyXHTMLFile(support::FileName const & filename, OutputParams const & runparams_in) const; /// void writeLyXHTMLSource(odocstream & os, OutputParams const & runparams_in, - bool only_body = false) const; + OutputWhat output = FullSource) const; /// returns the main language for the buffer (document) Language const * language() const; /// get l10n translated to the buffers language diff --git a/src/BufferList.cpp b/src/BufferList.cpp index e19c8aa63d..5143c13126 100644 --- a/src/BufferList.cpp +++ b/src/BufferList.cpp @@ -213,7 +213,7 @@ void BufferList::updateIncludedTeXfiles(string const & masterTmpDir, if (!(*it)->isDepClean(masterTmpDir)) { string writefile = addName(masterTmpDir, (*it)->latexName()); (*it)->makeLaTeXFile(FileName(writefile), masterTmpDir, - runparams, false); + runparams, Buffer::OnlyBody); (*it)->markDepClean(masterTmpDir); } } diff --git a/src/graphics/PreviewLoader.cpp b/src/graphics/PreviewLoader.cpp index 6b6e1bad71..26c9b3c977 100644 --- a/src/graphics/PreviewLoader.cpp +++ b/src/graphics/PreviewLoader.cpp @@ -716,7 +716,7 @@ void PreviewLoader::Impl::dumpPreamble(otexstream & os) const runparams.nice = true; runparams.moving_arg = true; runparams.free_spacing = true; - buffer_.writeLaTeXSource(os, buffer_.filePath(), runparams, true, false); + buffer_.writeLaTeXSource(os, buffer_.filePath(), runparams, Buffer::OnlyPreamble); // FIXME! This is a HACK! The proper fix is to control the 'true' // passed to WriteStream below: diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 42b4d8f652..e7f9da3747 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -624,7 +624,7 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const runparams.par_begin = 0; runparams.par_end = tmp->paragraphs().size(); if (!tmp->makeLaTeXFile(tmpwritefile, masterFileName(buffer()). - onlyPath().absFileName(), runparams, false)) { + onlyPath().absFileName(), runparams, Buffer::OnlyBody)) { docstring msg = bformat(_("Included file `%1$s' " "was not exported correctly.\nWarning: " "LaTeX export is probably incomplete."), @@ -793,7 +793,7 @@ docstring InsetInclude::xhtml(XHTMLStream & xs, OutputParams const & rp) const if (all_pars) { op.par_begin = 0; op.par_end = 0; - ibuf->writeLyXHTMLSource(xs.os(), op, true); + ibuf->writeLyXHTMLSource(xs.os(), op, Buffer::OnlyBody); } else xs << XHTMLStream::ESCAPE_NONE << "