]> git.lyx.org Git - features.git/commitdiff
Partially fix bug 4532: http://bugzilla.lyx.org/show_bug.cgi?id=4532.
authorRichard Heck <rgheck@comcast.net>
Tue, 5 Feb 2008 22:57:33 +0000 (22:57 +0000)
committerRichard Heck <rgheck@comcast.net>
Tue, 5 Feb 2008 22:57:33 +0000 (22:57 +0000)
See in particular comment 6.

We forcibly load stdinsets.inc unless the TextClass declares:
  Provides stdinsets 1
There isn't really any such package, of course. We're just using this
(per a suggestion by JMarc) to say we've loaded relevant info about the
standard insets.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22802 a592a061-630c-0410-9148-cb99ea01b6c8

lib/layouts/stdinsets.inc
src/TextClass.cpp

index 46ddf5f379fa3efee78f1a752cb6de36d335b46e..71e17bd63cf111c7837c048f7e65457c299672e9 100644 (file)
@@ -16,7 +16,7 @@
 #      Font                  Nothing to put here, below are descriptions of the different
 #                         allowable adjustments for the font used to draw the text
 #                         appearing within the inset text. All these items are optional.
-#        Color               Color of 
+#        Color               Color of text
 #        Size                Font size of the textallowed value: Small, Smaller, ...
 #                         FIXME defined in FontSize in FontEnums.h
 #        Family              FIXME defined in FontFamily in FontEnums.h
 #                         optional.
 #        Color               see definition above (in the Font node).
 #        Size                see definition above (in the Font node).
-#        ...
+#
 #      EndFont               Nothing to put here, it's just a markup to indicate that we are
 #                         finished with the LabelFont definition.
 #      MultiPar              Indicates that multiple paragraphs are allowed within the inset
 #                         or not. FIXME: what is the default?
 #      Decoration:           Classic, Minimalistic, Conglomerate. Decoration styles
 #      PassThru              Do not do various LaTeX conversions, like the phrases
-#                            LaTeX, LyX, quote commands, etc.
+#                              LaTeX, LyX, quote commands, etc.
 #      KeepEmpty             Do not delete empty paragraphs (?)
 #      FreeSpacing           Preserve multiple spaces etc.
 #      ForceLTR              Force the "latex" language, leading to Left-to-Right
-#                           (latin) output, e.g., in ERT or URL. A kludge.
+#                              (latin) output, e.g., in ERT or URL. A kludge.
 #      Requires              Require a given (supported) feature. Multiple features must
-#                            be comma-separated.
+#                         be comma-separated.
 #End
 
 Format 6
 
+Provides stdinsets 1
+
 InsetLayout Marginal
        LabelString           margin
        LatexType             command
index 3444630ef784aab290f46349986650c6b8ed2cc2..45c8fc6a304808c25251b60fcdc7465f7725d4b6 100644 (file)
@@ -454,33 +454,58 @@ bool TextClass::read(FileName const & filename, ReadType rt)
        LYXERR(Debug::TCLASS, "Finished reading " + translateRT(rt) + ": " +
                        to_utf8(makeDisplayPath(filename.absFilename())));
 
-       if (rt == BASECLASS) {
-               if (defaultlayout_.empty()) {
-                       lyxerr << "Error: Textclass '" << name_
-                              << "' is missing a defaultstyle." << endl;
+       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()) {
+                       frontend::Alert::warning(_("Missing File"),
+                                       _("Could not find stdinsets.inc! This may lead to data loss!"));
+                       error = true;
+               } else if (read(tmp, MERGE)) {
+                       frontend::Alert::warning(_("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;
 }