#include "graphics/Previews.h"
+#include "support/LAssert.h"
#include "support/textutils.h"
#include "support/filetools.h"
#include "support/path.h"
#include "support/FileInfo.h"
#include "support/lyxmanip.h"
#include "support/lyxtime.h"
+#include "support/gzstream.h"
#include <boost/bind.hpp>
#include <boost/tuple/tuple.hpp>
namespace {
-const int LYX_FORMAT = 224;
+const int LYX_FORMAT = 225;
+
+bool openFileWrite(ofstream & ofs, string const & fname)
+{
+ ofs.open(fname.c_str());
+ if (!ofs) {
+ string const file = MakeDisplayPath(fname, 50);
+ string text = bformat(_("Could not open the specified "
+ "document\n%1$s."), file);
+ Alert::error(_("Could not open file"), text);
+ return false;
+ }
+ return true;
+}
+
} // namespace anon
return false;
}
+ bool const compressed = (fname.substr(fname.size() - 3, 3) == ".gz");
+
+ if (compressed) {
+ gz::ogzstream ofs(fname.c_str());
+
+ if (!ofs)
+ return false;
+
+ return do_writeFile(ofs);
+
+ }
+
ofstream ofs(fname.c_str());
- if (!ofs) {
+ if (!ofs)
return false;
- }
+
+ return do_writeFile(ofs);
+}
+
+
+bool Buffer::do_writeFile(ostream & ofs) const
+{
#ifdef HAVE_LOCALE
// Use the standard "C" locale for file output.
// Write marker that shows file is complete
ofs << "\n\\the_end" << endl;
- ofs.close();
+ // Shouldn't really be needed....
+ //ofs.close();
// how to check if close went ok?
// Following is an attempt... (BE 20001011)
void Buffer::writeFileAscii(string const & fname, int linelen)
{
- ofstream ofs(fname.c_str());
- if (!ofs) {
- string const file = MakeDisplayPath(fname, 50);
- string text = bformat(_("Could not save the document\n%1$s."), file);
- Alert::error(_("Could not save document"), text);
+ ofstream ofs;
+ if (!::openFileWrite(ofs, fname))
return;
- }
writeFileAscii(ofs, linelen);
}
}
-
void Buffer::makeLaTeXFile(string const & fname,
string const & original_path,
LatexRunParams const & runparams,
- bool only_body, bool only_preamble)
+ bool output_preamble, bool output_body)
{
lyxerr[Debug::LATEX] << "makeLaTeXFile..." << endl;
- ofstream ofs(fname.c_str());
- if (!ofs) {
- string const file = MakeDisplayPath(fname, 50);
- string text = bformat(_("Could not open the specified document\n%1$s."),
- file);
- Alert::error(_("Could not open file"), text);
+ ofstream ofs;
+ if (!::openFileWrite(ofs, fname))
return;
- }
makeLaTeXFile(ofs, original_path,
- runparams, only_body, only_preamble);
+ runparams, output_preamble, output_body);
ofs.close();
if (ofs.fail()) {
void Buffer::makeLaTeXFile(ostream & os,
string const & original_path,
LatexRunParams const & runparams_in,
- bool only_body, bool only_preamble)
+ bool output_preamble, bool output_body)
{
LatexRunParams runparams = runparams_in;
niceFile = runparams.nice; // this will be used by Insetincludes.
// first paragraph of the document. (Asger)
texrow.start(paragraphs.begin()->id(), 0);
- if (!only_body && runparams.nice) {
+ if (output_preamble && runparams.nice) {
os << "%% " << lyx_docversion << " created this file. "
"For more info, see http://www.lyx.org/.\n"
"%% Do not edit unless you really know what "
// input@path is set when the actual parameter
// original_path is set. This is done for usual tex-file, but not
// for nice-latex-file. (Matthias 250696)
- if (!only_body) {
+ if (output_preamble) {
if (!runparams.nice) {
// code for usual, NOT nice-latex-file
os << "\\batchmode\n"; // changed
// Write the preamble
runparams.use_babel = params.writeLaTeX(os, features, texrow);
- if (only_preamble)
+ if (!output_body)
return;
// make the body.
os << "\\begin{document}\n";
texrow.newline();
- } // only_body
+ } // output_preamble
lyxerr[Debug::INFO] << "preamble finished, now the body." << endl;
if (!lyxrc.language_auto_begin) {
texrow.newline();
}
- if (!only_body) {
+ if (output_preamble) {
os << "\\end{document}\n";
texrow.newline();
void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
{
- ofstream ofs(fname.c_str());
-
- if (!ofs) {
- string const file = MakeDisplayPath(fname, 50);
- string text = bformat(_("Could not save the specified document\n%1$s.\n"),
- file);
- Alert::error(_("Could not save document"), text);
+ ofstream ofs;
+ if (!::openFileWrite(ofs, fname))
return;
- }
niceFile = nice; // this will be used by included files.
void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
{
- ofstream ofs(fname.c_str());
- if (!ofs) {
- string const file = MakeDisplayPath(fname, 50);
- string text = bformat(_("Could not save the specified document\n%1$s.\n"),
- file);
- Alert::error(_("Could not save document"), text);
+ ofstream ofs;
+ if (!::openFileWrite(ofs, fname))
return;
- }
niceFile = nice; // this will be used by Insetincludes.