]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
* do not lookup the same macro all the time
[lyx.git] / src / Buffer.cpp
index ee4275b5d18d00d8853360e1c65e87cc5fe04651..f4088ae8ac904d1d195fceb8ef896a489d3b6268 100644 (file)
@@ -3,7 +3,7 @@
  * 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.
  */
@@ -34,6 +34,7 @@
 #include "LyXAction.h"
 #include "Lexer.h"
 #include "Text.h"
+#include "LyX.h"
 #include "LyXRC.h"
 #include "LyXVC.h"
 #include "Messages.h"
@@ -141,7 +142,7 @@ using std::string;
 
 namespace {
 
-int const LYX_FORMAT = 270;
+int const LYX_FORMAT = 271;
 
 } // namespace anon
 
@@ -888,26 +889,36 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
        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;
@@ -1610,7 +1621,10 @@ Buffer const * Buffer::getMasterBuffer() const
        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();
        }