* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
*
* Full author contact details are available in file CREDITS.
*/
#include "LyXAction.h"
#include "Lexer.h"
#include "Text.h"
+#include "LyX.h"
#include "LyXRC.h"
#include "LyXVC.h"
#include "Messages.h"
namespace {
-int const LYX_FORMAT = 269;
+int const LYX_FORMAT = 271;
} // namespace anon
}
if (params().outputChanges) {
- if (!LaTeXFeatures::isAvailable("dvipost")) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
+ if (!dvipost && !xcolorsoul) {
Alert::warning(_("Changes not shown in LaTeX output"),
_("Changes will not be highlighted in LaTeX output, "
- "because dvipost is not installed.\n"
- "If you are familiar with TeX, consider redefining "
- "\\lyxinserted and \\lyxdeleted in the LaTeX preamble."));
- } else {
+ "because neither dvipost nor xcolor/soul are installed.\n"
+ "Please install these packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ } else if (!xcolorsoul) {
Alert::warning(_("Changes not shown in LaTeX output"),
_("Changes will not be highlighted in LaTeX output "
- "when using pdflatex.\n"
- "If you are familiar with TeX, consider redefining "
- "\\lyxinserted and \\lyxdeleted in the LaTeX preamble."));
+ "when using pdflatex, because xcolor and soul are not installed.\n"
+ "Please install both packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
}
}
if (!openFileWrite(ofs, fname))
return false;
+ bool failed_export = false;
try {
writeLaTeXSource(ofs, original_path,
runparams, output_preamble, output_body);
}
- catch (iconv_codecvt_facet_exception &) {
- Alert::error(_("Encoding error"),
- _("Some characters of your document are not "
- "representable in the chosen encoding.\n"
- "Changing the document encoding to utf8 could help."));
- return false;
+ catch (iconv_codecvt_facet_exception & e) {
+ lyxerr << "Caught iconv exception: " << e.what() << endl;
+ failed_export = true;
+ }
+ catch (std::exception const & e) {
+ lyxerr << "Caught \"normal\" exception: " << e.what() << endl;
+ failed_export = true;
+ }
+ catch (...) {
+ lyxerr << "Caught some really weird exception..." << endl;
+ LyX::cref().emergencyCleanup();
+ abort();
}
ofs.close();
if (ofs.fail()) {
+ failed_export = true;
lyxerr << "File '" << fname << "' was not closed properly." << endl;
- Alert::error(_("Error closing file"),
- _("The output file could not be closed properly.\n"
- " Probably some characters of your document are not "
- "representable in the chosen encoding.\n"
- "Changing the document encoding to utf8 could help."));
+ }
+
+ if (failed_export) {
+ Alert::error(_("Encoding error"),
+ _("Some characters of your document are probably not "
+ "representable in the chosen encoding.\n"
+ "Changing the document encoding to utf8 could help."));
return false;
}
return true;
TextClass const & tclass = params().getTextClass();
if (params().outputChanges) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
if (features.runparams().flavor == OutputParams::LATEX) {
- if (LaTeXFeatures::isAvailable("dvipost")) {
+ if (dvipost) {
+ features.require("ct-dvipost");
features.require("dvipost");
- } else {
+ } else if (xcolorsoul) {
+ features.require("ct-xcolor-soul");
+ features.require("soul");
+ features.require("xcolor");
+ } else {
features.require("ct-none");
}
} else if (features.runparams().flavor == OutputParams::PDFLATEX ) {
- features.require("ct-none");
+ if (xcolorsoul) {
+ features.require("ct-xcolor-soul");
+ features.require("soul");
+ features.require("xcolor");
+ features.require("pdfcolmk"); // improves color handling in PDF output
+ } else {
+ features.require("ct-none");
+ }
}
}
if (!params().parentname.empty()
&& theBufferList().exists(params().parentname)) {
Buffer const * buf = theBufferList().getBuffer(params().parentname);
- if (buf)
+ //We need to check if the parent is us...
+ //FIXME RECURSIVE INCLUDE
+ //This is not sufficient, since recursive includes could be downstream.
+ if (buf && buf != this)
return buf->getMasterBuffer();
}