]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Tooltips for collapsables and branches
[lyx.git] / src / TextClass.cpp
index ba1ce19b4d66af6bd131020e230f52ec3e8974b5..7a51403dd365596c1e34872fa3d7d6bcbea834df 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "frontends/alert.h"
 
+#include "support/ExceptionMessage.h"
 #include "support/lstrings.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
@@ -86,6 +87,21 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
        return true;
 }
 
+
+std::string translateRT(TextClass::ReadType rt) 
+{
+       switch (rt) {
+       case TextClass::BASECLASS:
+               return "textclass";
+       case TextClass::MERGE:
+               return "input file";
+       case TextClass::MODULE:
+               return "module file";
+       }
+       // shutup warning
+       return string();
+}
+
 } // namespace anon
 
 
@@ -199,20 +215,8 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                { "tocdepth",        TC_TOCDEPTH }
        };
 
-       switch (rt) {
-       case BASECLASS:
-               LYXERR(Debug::TCLASS, "Reading textclass ");
-               break;
-       case MERGE:
-               LYXERR(Debug::TCLASS, "Reading input file ");
-               break;
-       case MODULE:
-               LYXERR(Debug::TCLASS, "Reading module file ");
-               break;
-       default:
-               BOOST_ASSERT(false);
-       }
-       LYXERR(Debug::TCLASS, to_utf8(makeDisplayPath(filename.absFilename())));
+       LYXERR(Debug::TCLASS, "Reading " + translateRT(rt) + ": " +
+               to_utf8(makeDisplayPath(filename.absFilename())));
 
        Lexer lexrc(textClassTags,
                sizeof(textClassTags) / sizeof(textClassTags[0]));
@@ -450,41 +454,61 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                return error;
        }
 
-       if (rt == MODULE) 
-               LYXERR(Debug::TCLASS, "Finished reading module file "
-                               << to_utf8(makeDisplayPath(filename.absFilename())));
-       else if (rt == MERGE)
-               LYXERR(Debug::TCLASS, "Finished reading input file "
-                               << to_utf8(makeDisplayPath(filename.absFilename())));
-       else { // we are at top level here.
-               LYXERR(Debug::TCLASS, "Finished reading textclass "
-                                     << to_utf8(makeDisplayPath(filename.absFilename())));
-               if (defaultlayout_.empty()) {
-                       lyxerr << "Error: Textclass '" << name_
-                              << "' is missing a defaultstyle." << endl;
+       LYXERR(Debug::TCLASS, "Finished reading " + translateRT(rt) + ": " +
+                       to_utf8(makeDisplayPath(filename.absFilename())));
+
+       if (rt != BASECLASS) 
+               return error;
+
+       if (defaultlayout_.empty()) {
+               lyxerr << "Error: Textclass '" << name_
+                                               << "' is missing a defaultstyle." << endl;
+               error = true;
+       }
+               
+       //Try to erase "stdinsets" from the provides_ set. 
+       //The
+       //  Provides stdinsets 1
+       //declaration simply tells us that the standard insets have been
+       //defined. (It's found in stdinsets.inc but could also be used in
+       //user-defined files.) There isn't really any such package. So we
+       //might as well go ahead and erase it.
+       //If we do not succeed, then it was not there, which means that
+       //the textclass did not provide the definitions of the standard
+       //insets. So we need to try to load them.
+       int erased = provides_.erase("stdinsets");
+       if (!erased) {
+               FileName tmp = libFileSearch("layouts", "stdinsets.inc");
+
+               if (tmp.empty()) {
+                       throw ExceptionMessage(WarningException, _("Missing File"),
+                               _("Could not find stdinsets.inc! This may lead to data loss!"));
+                       error = true;
+               } else if (read(tmp, MERGE)) {
+                       throw ExceptionMessage(WarningException, _("Corrupt File"),
+                                       _("Could not read stdinsets.inc! This may lead to data loss!"));
                        error = true;
                }
+       }
 
-               min_toclevel_ = Layout::NOT_IN_TOC;
-               max_toclevel_ = Layout::NOT_IN_TOC;
-               const_iterator cit = begin();
-               const_iterator the_end = end();
-               for ( ; cit != the_end ; ++cit) {
-                       int const toclevel = (*cit)->toclevel;
-                       if (toclevel != Layout::NOT_IN_TOC) {
-                               if (min_toclevel_ == Layout::NOT_IN_TOC)
-                                       min_toclevel_ = toclevel;
-                               else
-                                       min_toclevel_ = min(min_toclevel_,
-                                                        toclevel);
-                               max_toclevel_ = max(max_toclevel_,
-                                                        toclevel);
-                       }
+       min_toclevel_ = Layout::NOT_IN_TOC;
+       max_toclevel_ = Layout::NOT_IN_TOC;
+       const_iterator cit = begin();
+       const_iterator the_end = end();
+       for ( ; cit != the_end ; ++cit) {
+               int const toclevel = (*cit)->toclevel;
+               if (toclevel != Layout::NOT_IN_TOC) {
+                       if (min_toclevel_ == Layout::NOT_IN_TOC)
+                               min_toclevel_ = toclevel;
+                       else
+                               min_toclevel_ = min(min_toclevel_,
+                                                       toclevel);
+                       max_toclevel_ = max(max_toclevel_,
+                                                       toclevel);
                }
-               LYXERR(Debug::TCLASS, "Minimum TocLevel is " << min_toclevel_
-                       << ", maximum is " << max_toclevel_);
-
        }
+       LYXERR(Debug::TCLASS, "Minimum TocLevel is " << min_toclevel_
+               << ", maximum is " << max_toclevel_);
 
        return error;
 }