#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)
{
{
Alert::warning(_("Unknown document class"),
bformat(_("Using the default document class, because the "
- " class %1$s is unknown."), unknown));
+ "class %1$s is unknown."), unknown));
}
} // anon
// changed to be public and have one parameter
// if par = 0 normal behavior
// else insert behavior
-// Returns false if "\the_end" is not read (Asger)
+// Returns false if "\end_document" is not read (Asger)
bool Buffer::readBody(LyXLex & lex, ParagraphList::iterator pit)
{
Paragraph::depth_type depth = 0;
lyxerr[Debug::PARSER] << "Handling token: `"
<< token << '\'' << endl;
- if (token == "\\the_end") {
+ if (token == "\\end_document") {
the_end_read = true;
continue;
}
static Change current_change;
int unknown = 0;
- if (token == "\\layout") {
+ if (token == "\\begin_layout") {
lex.pushToken(token);
Paragraph par;
}
-bool Buffer::readFile(LyXLex & lex, string const & filename)
+bool Buffer::readFile(string const & filename)
{
+ // Check if the file is compressed.
+ string const format = getExtFromContents(filename);
+ if (format == "gzip" || format == "zip" || format == "compress") {
+ params.compressed = true;
+ }
+
+ LyXLex lex(0, 0);
+ lex.setFile(filename);
+
bool ret = readFile(lex, filename, paragraphs.begin());
// After we have read a file, we must ensure that the buffer
// the first token _must_ be...
if (token != "\\lyxformat") {
+ lyxerr << "Token: " << token << endl;
+
Alert::error(_("Document format failure"),
_("The specified document is not a LyX document."));
return false;
//lyxerr << " dot found at " << dot << endl;
if (dot != string::npos)
tmp_format.erase(dot, 1);
- file_format = strToInt(tmp_format);
+ int file_format = strToInt(tmp_format);
//lyxerr << "format: " << file_format << endl;
if (file_format == LYX_FORMAT) {
// current format
return false;
}
command += " -t"
- +tostr(LYX_FORMAT) + ' '
+ + tostr(LYX_FORMAT) + ' '
+ QuoteName(filename);
lyxerr[Debug::INFO] << "Running '"
<< command << '\''
return false;
}
- ofstream ofs(fname.c_str());
- if (!ofs)
- return false;
+ bool retval;
+
+ if (params.compressed) {
+ gz::ogzstream ofs(fname.c_str());
+
+ if (!ofs)
+ return false;
+
+ retval = do_writeFile(ofs);
+
+ } else {
+ ofstream ofs(fname.c_str());
+ if (!ofs)
+ return false;
+
+ retval = do_writeFile(ofs);
+ }
+
+ return retval;
+}
+
+
+bool Buffer::do_writeFile(ostream & ofs) const
+{
#ifdef HAVE_LOCALE
// Use the standard "C" locale for file output.
// The top of the file should not be written by params.
// write out a comment in the top of the file
- ofs << '#' << lyx_docversion
+ ofs << "#LyX " << lyx_version
<< " created this file. For more info see http://www.lyx.org/\n"
<< "\\lyxformat " << LYX_FORMAT << "\n";
pit->write(this, ofs, params, depth);
// Write marker that shows file is complete
- ofs << "\n\\the_end" << endl;
+ ofs << "\n\\end_document" << endl;
- ofs.close();
+ // Shouldn't really be needed....
+ //ofs.close();
// how to check if close went ok?
// Following is an attempt... (BE 20001011)
texrow.start(paragraphs.begin()->id(), 0);
if (output_preamble && runparams.nice) {
- os << "%% " << lyx_docversion << " created this file. "
+ os << "%% LyX " << lyx_version << " created this file. "
"For more info, see http://www.lyx.org/.\n"
"%% Do not edit unless you really know what "
"you are doing.\n";
}
}
- ofs << "<!-- " << lyx_docversion
+ ofs << "<!-- LyX " << lyx_version
<< " created this file. For more info see http://www.lyx.org/"
<< " -->\n";
}
sgml::openTag(ofs, 0, false, top);
- ofs << "<!-- DocBook file was created by " << lyx_docversion
+ ofs << "<!-- DocBook file was created by LyX " << lyx_version
<< "\n See http://www.lyx.org/ for more information -->\n";
vector<string> environment_stack(10);